Step 7 Skripteinbindung Telegram Messenger

ChrisM82

Level-2
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin gerade dabei eine Benachrichtigung mit dem "Telegram" Messenger zu realisieren, da mir die SMS Benachrichtigung über den Sinaut langsam zu nervig wird.
Das versenden der Nachrichten klappt schon sehr gut und ist von der Geschwindigkeit her sogar schneller als die SMS Geschichte.
Mein Problem ist jetzt noch die vernünftige Einbindung der einzelnen Bitmeldungen. Gibt es die Möglichkeit die Meldungen aus dem Störmeldewort "herauszulösen" ohne jedes einzelne Bit als Variable anlegen zu müssen?

Bisher sieht das ganze so aus bei mir.
telegram2.jpg
 
Ich bin mir nicht sicher ob ich verstanden habe was du möchtest, aber ich wär an der Sache auch interessiert.

Ein Zugriff mittels Slice kann die Visu m.M. nicht.
D.h. du wirst nicht drum herumkommen, entweder die Bits einzeln herauszuführen, oder eine Funktion schreiben die dir mittels Wortvergleich
Störwort and Filterwort <> 16#0 ein Störwort mit einem Filter vergleicht.
In dem Filterwort kannst du dann einzelne Bits maskieren. Somit würde, wenn dieses Bit im Störwort auch True ist, die Bedingung stimmen und die gesamte Abfrage würde True werden.

Filterwort wäre z.B. 1h, somit wäre das erste Bit True, bei 2h das zweite, bei 4h das dritte, bei 8h das vierte und bei 10h das fünfte, usw. Welche Werte du brauchst lässt sich mit dem Windows Taschenrechner herausfinden. Einfach in Binär die Bits eingeben und dann auch Hex umschalten.

Gäbe es ne Möglichkeit, dass du das was du geschwärzt hast gegen Dummy- Daten ersetzt und hier im Klartext reinschreibst?
Auch ne Beschreibung was man dafür braucht würde mich interessieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
danke erstmal für die Antwort. Ich müsste eigentlich nur die eine bzw mehrere Bitmeldung auswerten können um dann die entsprechenden Texte an Telegram weiterleiten zu können.
Leider funktioniert es nicht über die Funktion

If SmartTags ("Bitmeldung 102")=True Then o_Open "GET", "https://api.telegram.org/bot1234567:AAAAAAAAAAAAAAAAAAAAA/sendMessage?chat_id=12345678&text=Stoerung BlahBlah", False

Der geschwärzte Text ist nur die ID mit dem Text dahinter. Sieht dann Beispielsweise so aus.
https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text="texty text"

Eine Anleitung zum Bot einrichten gibt es hier.
https://www.tutonaut.de/anleitung-e...hrichten-und-dateien-aus-dem-terminal-senden/
 
Gibt es die Möglichkeit die Meldungen aus dem Störmeldewort "herauszulösen" ohne jedes einzelne Bit als Variable anlegen zu müssen?
Dim VariableDint As Long ' ("DINT")
Dim BitNr As Integer ' ("INT")
Dim BitTest As Boolean ' ("BOOL")

' Zum Testen von 0 <= BitNr <= 30:
BitTest = VariableDint And 2 ^ BitNr

' Zum Testen von 0 <= BitNr <= 31:
If VariableDint < 0 And BitNr > 30 Then BitTest = True Else BitTest = VariableDint And 2 ^ BitNr
 
Vorsicht! Wenn in VBS die Bits von DWord-Variablen per AND ausmaskiert werden, dann darf das höchste Bit 31 nicht gesetzt sein, weil es dann einen Runtime Error gibt. Vor dem AND muß das Bit 31 getestet werden. Erklärung des Problems und Umgehung siehe hier

PS: in VBS kann man bei DIM keinen Datentyp festlegen. VBS wählt (und ändert) den Datentyp der Variablen automatisch bei jeder Zuweisung.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vor dem AND muß das Bit 31 getestet werden.
Das hatte ich in #4 berücksichtigt und in VBA funktioniert es auch.

PS: in VBS kann man bei DIM keinen Datentyp festlegen. VBS wählt (und ändert) den Datentyp der Variablen automatisch bei jeder Zuweisung.
Das war mir nicht bewusst - sorry!
Aber vielleicht funktioniert in VBS etwas anderes so wie in VBA:
In VBA kann man, statt eine Deklaration zu verwenden, den Typ LONG wählen, indem man den VariablenNamen auf '&' enden lässt?
In den Beispielen aus #4 also VariableDint& statt VariableDint schreibt?

Gruss, Heinileini
 
In VBA kann man, statt eine Deklaration zu verwenden, den Typ LONG wählen, indem man den VariablenNamen auf '&' enden lässt?
Interessant und gleichzeitig seltsame Syntax... gibt's dann für andere Datentypen andere Sonderzeichen?

VBS kennt das & jedenfalls nicht. Wenn man den Datentyp festlegen will muss man initialisieren...
Code:
Dim LongVar
LongVar = CLng(0)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vor dem AND muß das Bit 31 getestet werden.
Das hatte ich in #4 berücksichtigt und in VBA funktioniert es auch.
Dim VariableDint As Long ' ("DINT")
Dim BitNr As Integer ' ("INT")
Dim BitTest As Boolean ' ("BOOL")

' Zum Testen von 0 <= BitNr <= 30:
BitTest = VariableDint And 2 ^ BitNr
Das geht so in VB/VBA.
VBS aber:
Code:
[COLOR="#008000"]'VBS in WinCC flexible oder TIA[/COLOR]
Dim VariableDint, BitNr, BitTest

VariableDint = SmartTags("MyDWord")  [COLOR="#008000"]'in WinCC flexible oder TIA[/COLOR]

[COLOR="#008000"]' Zum Testen von 0 <= BitNr <= 30:[/COLOR]
BitTest = VariableDint And 2 ^ BitNr [COLOR="#FF0000"]'wirft Runtime Error wenn Bit 31 = 1[/COLOR]


Gibt es die Möglichkeit die Meldungen aus dem Störmeldewort "herauszulösen" ohne jedes einzelne Bit als Variable anlegen zu müssen?
Wenn das Störmeldewort wie in WinCCflex/TIA üblich ein 16-Bit-Word ist, dann braucht die Bit31-Problematik nicht beachtet werden, dann können Einzel-Bits wie von Heinileini in #4 gezeigt getestet werden. Für die Telegram-Auslösung müsste allerdings noch eine "Kommen"-Erkennung (steigende Flanke) mit Speicherung des vorherigen Zustands gebastelt werden und das Störmeldeword muß auf "Aktualisierung zyklisch fortlaufend" eingestellt sein (oder in jedem Bild verwendet werden).

Harald
 
... gibt's dann für andere Datentypen andere Sonderzeichen?
Ja, gibt es, z.B. @ für Currency, % für Integer, & für Long, ! für Single, # für Double, $ für String.
In der ExcelHilfe ist das auch irgendwo beschrieben.
Aber - wie so oft, wenn ich dort versuche, gezielt etwas zu finden - ... ;o(
(Nach "Datentypen-Schlüsselwörter" suchen und dann weiter durchhangeln)

Wenn man den Datentyp festlegen will muss man initialisieren...
Code:
Dim LongVar
LongVar = CLng(0)
Das sieht aber nach einer WertZuweisung aus und Harald sagt doch, VBS ändert bei jeder Zuweisung nach eigenem Gutdünken den DatenTyp …

Gruss, Heinileini

PS:
Also nicht initialisieren, sondern festlegen:
LongVar = CLng(VariableDint) !?

PPS:
' Zum Testen von 0 <= BitNr <= 30:
BitTest = VariableDint And 2 ^ BitNr
'wirft Runtime Error wenn Bit 31 = 1

Wie meinst Du das, Harald?
Wenn z.B. VariableDint = -2 ^ 31 ? Das stört in VBA nicht - liegt voll im zulässigen Bereich - ist aber leider eine "negative" Zahl.

 
Zuletzt bearbeitet:
VBS kennt das & jedenfalls nicht. Wenn man den Datentyp festlegen will muss man initialisieren...
Code:
Dim LongVar
LongVar = CLng(0)
Code:
Dim LongVar
LongVar = CLng(0) [COLOR="#008000"]'jetzt hat LongVar den Datentyp Long[/COLOR]

LongVar = 3000000000 [COLOR="#008000"]'und jetzt den Datentyp Double[/COLOR]

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Harald sagt doch, VBS ändert bei jeder Zuweisung nach eigenem Gutdünken den DatenTyp …
Ach herje.. Da habt ihr recht. So ein Grauß.

Wie meinst Du das, Harald?
Wenn z.B. VariableDint = -2 ^ 31 ? Das stört in VBA nicht - liegt voll im zulässigen Bereich - ist aber leider eine "negative" Zahl.
VBA mag das vielleicht nicht stören...
Der Long in VBS (WinCC) hat aber nur 32Bit in ist der größte zur Verfügung stehende Ganzzahldatentyp (min. -2.147.483.648 max. 2147483647).
Wenn man jetzt folgendes machst...
Code:
Dim TestVar

TestVar = CLng(0) 
TestVar = 2 ^ 31
ShowSystemAlarm TypeName(TestVar) & " | " & TestVar
... lautet das Ergebnis "Double" und "2147483648".
Da die Zahl im Long nicht Platz hat macht er eben mal einen Double draus. Damit kommt das And nicht klar.

Interessanterweise liefert...
Code:
Dim TestVar

TestVar = CLng(0) 
TestVar = [B][COLOR=#ff0000]-[/COLOR][/B]2 ^ 31
ShowSystemAlarm TypeName(TestVar) & " | " & TestVar

... den zwar den richtigen Wert "-2147483648", der Datentyp wir aber auch auf Double gesetzt.
Obwohl der Wert auf der negativen Seite eigentlich Platz im Long haben müsste.

 
Zuletzt bearbeitet:
Das sieht ja so aus, als ob in VBS alle Variablen nur den DatenTyp Variant kennen!?
Da muss man hoffen und beten, dass VBS die GleitkommaZahl wieder in eine "artgerechte" Darstellung für die UND-Verknüpfung umwandelt … (bei der das Bit-31-Problem nicht auftritt) … denn sonst: wenn die GleitkommaDarstellung - so wie sie ist - verUNDet wird, passt die Position des zu testenden Bits nicht mehr (die höchstwertigen stehen nicht mehr linksbündig und die niederwertigsten sind geschlabbert).
Ob uns das wohl alles erspart geblieben wäre, wenn es nie einen Grund gegeben hätte, den Spruch "In a world without fences, who needs Gates" zu prägen? :ROFLMAO:
 
Ja die Sache mit den wechselnden Datentypen scheint ein Grauß.
Aber Excel verhält sich mit VBA auch ähnlich. Hab folgenden Code gerade in nem Makro versucht.
Code:
On Error Resume Next
Dim TestVar, TestVar2

TestVar = CLng(0)
MsgBox TypeName(TestVar) & " | " & TestVar                      'Type: Long - Wert 0

TestVar = 2 ^ 31
MsgBox TypeName(TestVar) & " | " & TestVar                      'Type: [COLOR=#ff0000][U][B]Double[/B][/U][/COLOR] - Wert 2147483648

Err.Clear
TestVar2 = TestVar And 1
MsgBox TypeName(TestVar2) & " | " & Err.Description             'Type: Empty  - Fehler Überlauf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... den zwar den richtigen Wert "-2147483648", der Datentyp wir aber auch auf Double gesetzt.
Obwohl der Wert auf der negativen Seite eigentlich Platz im Long haben müsste.
Kann man das wirklich sehen oder nur vermuten? Bei -2^31 ist ja nur das höchstwertige Bit 1 und wenn von den niederwertigen Nullen diverse geschlabbert werden, sieht man keinen Unterschied.

PS:
TypeName() kannte ich noch gar nicht! :ROFLMAO:
Habe eigentlich in VBA immer "irgendwie" vorgegeben, was ich benutzen wollte.

PPS:
Die "Kreatöre" von VBS bzw. die Beschneider von VB/VBA zu VBS haben doch keine Ahnung davon, dass es auch Leute gibt, die noch das allerletzte Bit ernst nehmen und so pingelig sein können, wie wir SPS-Programmierer es sind …

PPPS:
Aber Excel verhält sich mit VBA auch ähnlich.
Zweifellos! Aber in VBA kann man wenigstens per VariablenDeklaration oder per TypKennzeichen den Einfluss nehmen, von dem mir bisher gar nicht so bewusst war, dass er in VBS nicht möglich ist.
Dadurch werden leider nicht alle Probleme weggeblasen, aber der Programmierer kann zumindest ein wenig steuern und Code produzieren, dessen Verhalten vorhersehbare Eigenschaften (mit vorhersehbaren Einschränkungen) hat.

Was mir an dieser Angelegenheit am stärksten gegen den Strich läuft, ist folgendes:
Es ist wieder ein Symptom dafür, dass die Tendenz zur "Hochsprache" Probleme schafft, die man in der SPS-Programmierung gar nicht erst erfunden hätte.
BASIC und Hochsprache? Das kann man sehen, wie man will. Ein "Beginner's All-purpose Symbolic Instruction Code" ist es längst nicht mehr.

PPPPS:
Warum geistert mir jetzt das Wort "BitSteller" als Synonym für "SPS-Programmierer" durch den Schädel? :ROFLMAO:
 
Zuletzt bearbeitet:
Zurück
Oben