WinCC Flex Schaltzustand Dect-Stackdose abfragen

pille333_73

Level-1
Beiträge
56
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Experten,

bräuchte eure Hilfe, möchte gerne folgendes machen.
Eine Dect-Steckdose per WinCC schalten -> das Schalten funktioniert
Den Schaltzustand möchte ich gerne per Kreis "Lampe" anzeigen lassen.
Leider komme ich hier nicht mehr weiter.
Das Schalten funktioniert per URL: http://192.168.255.19/webservices/homeautoswitch.lua?ain=087610415772&switchcmd=setswitchtoggle
Schaltzustand per URL: http://192.168.255.19/webservices/homeautoswitch.lua?ain=087610415772&switchcmd=getswitchstate
Das ganze wird durch den html-Browser gesteuert bzw. auch angezeigt - siehe Bild

Bild1.jpg

Wie bekomme ich den Schaltzustand Steckdose (die kann man auch manuell schalten) 0 oder 1 in eine Variable o.ä. damit ich diese per Animation weiter verarbeiten kann.

Wäre super, wenn jemand eine einfache Idee hätte

Vielen Dank im Voraus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was für eine visu? windows oder windows-ce?
wenn windows dann google mal nach wget. damit kannst du eine website in eine datei schreiben und diese dann via vb-script einlesen.

und hier kannst du aucvh mal schauen.
hier wird zwar eine andere datei runtergeladen und ausgewertet aber vom prinzip das gleiche
https://www.sps-forum.de/faq/71438-wetterdaten-die-automatisierungswelt-impotieren.html#post495816
 
Zuletzt bearbeitet:
erst mal danke -> oooooh vb-script -> hab ich mir fast schon gedacht -> werde ich natürlich versuchen

visu = WinCC flexible 2008
Windows
Runtime

Gibt es keine kleine einfache Lösung um den Status Steckdose (Link) in ein EA Feld o.ä. (zur weiteren Bearbeitung) zu bekommen
 
zeig mal wie die webseite im code aussieht.
also die seite mal im normalen browser aufrufen und quelltext anzeigen lassen.
und hier reinstellen.
da die anzeige im html browser sehr simpel aussieht (wenig ausgabe) denke ich ist das mit ein paar zeilen script erledigt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
da gibt es nicht viel zu sehen
liegt evt. daran, dass die Steckdose über die Fritzbox läuft.
Muss noch sagen, dass hinter meiner Fritzbox noch eine Fritzbox läuft mit Dect (ohne Kennwort) das ich die Steckdose schalten kann (ohne SID Thema).
Screenshot_1.jpg
 
das sieht einfach aus.
schau dir den link an den ich zu den wetterdaten gepostet habe
passe das ...get...script so an, dass die datei z.b. unter c:\dect.txt liegt

Code:
'dect_status 'ist nicht deklariert. kannst du als interne wcc-variable machen oder als plc-variable
Set fso = CreateObject("Scripting.FileSystemObject")
set indatei = fso.openTextFile("c:\dect.txt",1) 'name der heruntergeladenen datei
do while indatei.atendofstream <> true 
    inzeile = indatei.readline
    i = instr(inzeile,"== $")
    if if i > 0 then
        dect_staus = mid(inzeile,i + 4)
    next
loop
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
o.k. Statusmeldung

Skript get "Status 0 oder 1" funktioniert -> Datei DECT_STECKDOSE_1.txt wird erzeugt :p

Das einlesen der Datei funktioniert nicht ganz -> Kompilierungsfehler :?

Skript 1 einlesen:
'dect_status 'ist nicht deklariert. kannst du als interne wcc-variable machen oder als plc-variable
Set fso = CreateObject("Scripting.FileSystemObject")
set indatei = fso.openTextFile("s:\DECT_STECKDOSE_1.txt",1) 'name der heruntergeladenen datei
do while indatei.atendofstream <> true
inzeile = indatei.readline
i = instr(inzeile,"== $")
if i > 0 then
dect_status = mid(inzeile,i + 4)
next
loop

Skript 2 einlesen: habe auch ein anderes Skript (ist auch von dir) ausprobiert da ging es auch um DECT Steckdose -> Laufzeitfehlerfehler :?
dim eingabe,eingabedatei
eingabedatei = "s:\DECT_STECKDOSE_1.txt" 'oder was auch immer
Set fso = CreateObject("Scripting.FileSystemObject")
Set eingabe = fso.openTextFile(eingabedatei, 1)
SmartTags ("eingelesener_wert") = eingabe.readline
eingabe.close



Evt. könntest du mir hier nochmals Ratschläge geben
Und jetzt für die doofen -> wenn das Skript funktioniert, starte ich dieses doch als externes Programm und erstelle eine Variable z.B. dect_status in WinCC flexible 2008 und weise diese einem EA Feld o.ä. zu (String oder Binär oder egal)kann man das get und einlese Skript nicht direkt unter WinCC flexible 2008 unter Skript erstellen programmieren (es werden einige Befehle rot markiert -> wird doch VBS unterstütz)

Habe hier viele ?

Sag mal Danke im Voraus!
 
ich hatte das mal eben auf die schnelle dahingeschrieben. tia/wccf erwartet eine dimensionierung von variable die nicht in den hmi-variablen deklariert sind. also temp-variablen im script.

wget rufst du als externes programm auf. gesteuert über einen trigger.
Das kann auch innerhalb des auswertescript gemacht werden.
Es geht auch ohne wget. lies dir dazu den link mit den wetterdaten komplett durch

das auswerten erfolgt mit dem internen vbscript.

get.bat
Code:
c:
cd \
del "c:\DECT_STECKDOSE_1.txt"
e:\util\wget\wget.exe --no-check-certificate http://192.168.255.19/webservices/homeautoswitch.lua?ain=087610415772&switchcmd=getswitchstate
rem pause

das interne script
Code:
Sub VBFunktion_1()
'dect_status_plc habe ich als variable mit anbindung an die steuerung deklariert. TYP INT
'dect_status_plc habe ich als variable ohne anbindung an die steuerung deklariert. TYP INT

Dim fso, indatei, inzeile, i, dect_status_temporär

Set fso = CreateObject("Scripting.FileSystemObject")

StartProgram "c:\get.bat", "", hmiShowMinimized, hmiYes

Set indatei = fso.OpenTextFile("c:\DECT_STECKDOSE_1.txt",1) 'name der heruntergeladenen datei
Do While indatei.AtEndOfStream <> True
    inzeile = indatei.ReadLine
    i = InStr(inzeile,"== $")
    If i > 0 Then
        'welches du verwendest musst du selbst entscheiden
        SmartTags("dect_status_plc") = Mid(inzeile,i + 4)
        SmartTags("dect_status_intern") = Mid(inzeile,i + 4)
        dect_status_temporär = Mid(inzeile,i + 4)
    Next
Loop

End Sub
 
:shock: jetzt bin ich total neben der Spur
Also:
- Skript get funktioniert -> Datei DECT_STECKDOSE_1.txt wird erzeugt mit Inhalt 0 oder 1 je nach Schaltzustand der Steckdose
-
get.bat Datei ist zum löschen der Datei DECT_STECKDOSE_1.txt ???
-
das interne script ist ja zum Auswerten des Schaltzustand da ???

Mein Ansatz:
1: ich starte in WinCC meine Steckdose über eine Schaltfläche Ereignisse mit SetzeWert -> funktioniert
2: ich lasse irgendwie das
Skript get starten um die Datei DECT_STECKDOSE_1.txt zu erzeugen mit dem Zustand 0 oder 1 je nach Schaltzustand -> dies über die gleiche Schaltfläche mit Ereignis StarteProgramm (funktioniert nur bedingt manchmal richtiger Wert, manchmal falscher Wert?)
3: ich lasse irgendwie das interne script starten mit der Variable dect_status_intern um diese einem EA Feld o.ä. zu übergeben -> funktioniert noch nicht ganz, da ist noch ein Skript Fehler drin beim starten von WinCC

Bin ich hier auf dem richtigen Weg oder voll neben der Spur?
Internes Skript wollte ich nur um nicht so viele externe Skripte zu haben, evt. doch mit externen Skripte arbeiten (allerdings auch hier noch bastel arbeit)

Wäre super wenn Du auch hier deine Kommentare und evt. Hilfestellung geben könntest

Da hab ich mir was vorgenommen
:???:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
- get.bat Datei ist zum löschen der Datei DECT_STECKDOSE_1.txt ???
im ersten Schritt wird die datei gelöscht. damit bei fehlerhafter ausführung kein status ermittelt werden kann.
im zweiten schritt wird mit wget die datei heruntergeladen

- das interne script ist ja zum Auswerten des Schaltzustand da ???
1. um die externe get.bat auszuführen
2. zum auswerten

1: ich starte in WinCC meine Steckdose über eine Schaltfläche Ereignisse mit SetzeWert -> funktioniert
hänge an dieses ereigniss zusätzlich das script "status_holen_und_auswerten"

(funktioniert nur bedingt manchmal richtiger Wert, manchmal falscher Wert?)
liegt vermutlich daran, dass das auswertescript schneller ist als das datei holen.

3: ich lasse irgendwie das interne script starten mit der Variable dect_status_intern um diese einem EA Feld o.ä. zu übergeben -> funktioniert noch nicht ganz, da ist noch ein Skript Fehler drin beim starten von WinCC
dect_status_intern ist nicht zum starten des scripts sondern enthält den status nach der auswertung.
beim mir ist das script fehlerfrei. wo ist der fehler? (rechtklick im script
syntax prüfen.

externe batch: get.bat. läd den zustand der dect_steckose runter. aufruf im script.
Code:
c: 
cd \
del "c:\DECT_STECKDOSE_1.txt"
e:\util\wget\wget.exe --no-check-certificate http://192.168.255.19/webservices/homeautoswitch.lua?ain=087610415772&switchcmd=getswitchstate
rem pause

script in wincc: status_holen_und_auswerten
Code:
'dect_status_plc habe ich als variable mit anbindung an die steuerung deklariert. TYP INT
'dect_status_intern habe ich als variable ohne anbindung an die steuerung deklariert. TYP INT

Dim fso, indatei, inzeile, i, dect_status_temporär

Set fso = CreateObject("Scripting.FileSystemObject")

zs_wartezeit=3: Call warte 'warte 3 sekunden damit die dect ihren zustand ändern kann. ob diese warte notwendig ist musst du ausprobieren.

'datei c:\DECT_STECKDOSE_1.txt mit wget holen
StartProgram "c:\get.bat", "", hmiShowMinimized, hmiYes

zs_wartezeit=3: Call warte 'warte 3 sekunden damit wget fertig ist. evtl die zeit anpassen

'von wget erzeugte datei einlesen und auswerten
Set indatei = fso.OpenTextFile("c:\DECT_STECKDOSE_1.txt",1) 'name der heruntergeladenen datei
Do While indatei.AtEndOfStream <> True
    inzeile = indatei.ReadLine
    i = InStr(inzeile,"== $") 'hinter diesem gesuchten string ist der zustand
    If i > 0 Then
        'welches du verwendest musst du selbst entscheiden. in der var steht der zustand der dect-dose. z.b. um die schaltfläche farblich zu animieren.
        SmartTags("dect_status_plc") = Mid(inzeile,i + 4)
        SmartTags("dect_status_intern") = Mid(inzeile,i + 4)
        dect_status_temporär = Mid(inzeile,i + 4)
    End If
Loop

script in winccc: warte
Code:
'wartet x sekeunden
Dim t1,t2,t1a
'zs_wartezeit ist eine interne variable vom typ int
t1=Timer
Do
    t2=Timer
    If t2-t1 > zs_wartezeit Then
        Exit Do
    End If
    If t1>t2 Then
        t1a=86400-t1
        t1=0
        zs_wartezeit=zs_wartezeit-t1a
    End If
'    zs_restzeit=zs_wartezeit+t1-t2
Loop
 

Anhänge

  • Zwischenablage02.jpg
    Zwischenablage02.jpg
    44,3 KB · Aufrufe: 19
Zuletzt bearbeitet:
o.k. soweit mal alles rein, was rein gehört :grin:

Allerdings kann ich es nicht ausprobieren, da das Script meckert -> Zeile 25 über das Next (nicht erwartet)

'dect_status_plc habe ich als variable mit anbindung an die steuerung deklariert. TYP INT
'dect_status_intern habe ich als variable ohne anbindung an die steuerung deklariert. TYP INT

Dim fso, indatei, inzeile, i, dect_status_temporär

Set fso = CreateObject("Scripting.FileSystemObject")

zs_wartezeit=3: Call warte 'warte 3 sekunden damit die dect ihren zustand ändern kann. ob diese warte notwendig ist musst du ausprobieren.

'datei c:\DECT_STECKDOSE_1.txt mit wget holen
StartProgram "c:\get.bat", "", hmiShowMinimized, hmiYes

zs_wartezeit=3: Call warte 'warte 3 sekunden damit wget fertig ist. evtl die zeit anpassen

'von wget erzeugte datei einlesen und auswerten
Set indatei = fso_OpenTextFile("c:\DECT_STECKDOSE_1.txt",1) 'name der heruntergeladenen datei
Do While indatei.AtEndOfStream <> True
inzeile = indatei.ReadLine
i = InStr(inzeile,"== $") 'hinter diesem gesuchten string ist der zustand
If i > 0 Then
'welches du verwendest musst du selbst entscheiden. in der var steht der zustand der dect-dose. z.b. um die schaltfläche farblich zu animieren.
SmartTags("dect_status_plc") = Mid(inzeile,i + 4)
SmartTags("dect_status_intern") = Mid(inzeile,i + 4)
dect_status_temporär = Mid(inzeile,i + 4)
Next
Loop
Vielen Dank im Voraus!
 
o.k. Skript ist jetzt fehlerfrei

zum Ablauf:

über eine Schaltfläche Ereignisse klick starte ich
1: SetzeWert = schalte ich die Steckdose ein/aus über http://192.168.255.19/webservices/homeautoswitch.lua?ain=087610415772&switchcmd=setswitchtoggle = funktioniert
2: StarteProgramm = externes Skripts:\Dect_Steckdose_1_http-get.vbs = funktioniert -> Dect_Steckdose_1.txt wird erzeugt
3: status_holen_und_auswerten (internes Skript) = nach der wartezeit wird Dect_Steckdose_1.txt wieder gelöscht

aber irgendwie kommt der Status der Variable "SmartTags("dect_status_intern") = Mid(inzeile,i + 4)" nicht an


beim internes Skript status_holen_und_auswerten steht ja

'datei s:\DECT_STECKDOSE_1.txt mit wget holen
StartProgram "s:\get.bat", "", hmiShowMinimized, hmiYes

ist da der Status gemeint oder die Datei erzeugen? -> gehe mal davon aus Status holen aus der erzeugten DECT_STECKDOSE_1.txt von s:\Dect_Steckdose_1_http-get.vbs

evt. liegt es aber noch an wget Datei -> die bringt nämlich einen Fehler

Screenshot_1.jpg

Vielen Dank im Voraus!
 
o.k. Skript ist jetzt fehlerfrei

zum Ablauf:

über eine Schaltfläche Ereignisse klick starte ich
1: SetzeWert = schalte ich die Steckdose ein/aus über http://192.168.255.19/webservices/homeautoswitch.lua?ain=087610415772&switchcmd=setswitchtoggle = funktioniert
2: StarteProgramm = externes Skripts:\Dect_Steckdose_1_http-get.vbs = funktioniert -> Dect_Steckdose_1.txt wird erzeugt
3: status_holen_und_auswerten (internes Skript) = nach der wartezeit wird Dect_Steckdose_1.txt wieder gelöscht

aber irgendwie kommt der Status der Variable "SmartTags("dect_status_intern") = Mid(inzeile,i + 4)" nicht an


beim internes Skript status_holen_und_auswerten steht ja

'datei s:\DECT_STECKDOSE_1.txt mit wget holen
StartProgram "s:\get.bat", "", hmiShowMinimized, hmiYes

ist da der Status gemeint oder die Datei erzeugen? -> gehe mal davon aus Status holen aus der erzeugten DECT_STECKDOSE_1.txt von s:\Dect_Steckdose_1_http-get.vbs

evt. liegt es aber noch an wget Datei -> die bringt nämlich einen Fehler

Anhang anzeigen 43408

Vielen Dank im Voraus!
1. da du dect_steckdose_1.txt seperat erzeugst brauschst du die batch nicht ausführen.

2. so wie es aussieht ist dein aufruf in der batch nicht korrekt. im screenshot sind leerzeichen hinter der ain bei dem &
wget interpretiert das dann nicht als eine url. entweder leerzeichen weg oder den http-aufruf in anführungszeichen setzen.
wget versucht die url runterzuladen bis das erste leerzeichen kommt. kann nicht gehen da url nicht komplett. bad request.
weiterhin interpretiert wget das was nach dem leerzeichen kommt als neuen befehl (switchcmd) den es natürlich nicht gibt.

wget macht das was du mit der Dect_Steckdose_1_http-get.vbs machst. du hast die ganze zeit nicht erwähnt das du die datei nicht mit wget holst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das mit dem Aufruf Dect_Steckdose_1_http-get.vbs vergiss es -> war ein Versuch der Verzweiflung :grin:

o.k. folgendes durchgeführt / probiert

1. get.bat
-> die Leerzeichen sind in der get.bat nicht drin -> macht anscheinend wget
-> url in in Anführungszeichen gesetzt -> Datei wird erzeugt usw. (was schon mal ein Schritt weiter ist) -> allerdings wird keine .txt erzeugt sonder wie Bild

Screenshot_1.jpg

diese kann ich mit Editor aufrufen und steht auch immer der richtige Wert drin (was auch schon mal gut ist)

Kann man diese als txt erzeugen lassen, damit ich diese dann in WinCC einlesen kann ?

2. einlesen in WinCC
wollte mal die eine txt "DECT_STECKDOSE_1.txt" einlesen ob zu schauen ob Schaltzustand animiert wird über die Variable.
leider funktioniert das nicht so ganz, Variable ändert sich nicht (geprüft über Simulator)

Wenn es mal funktioniert, sind die Tips Skript get.bat usw. echt super für weitere Anwendungen (wenn ich das ganze dann mal verstanden haben natürlich :wink: )

Vielen Dank im Voraus!
 
wie heisst die erzeugte dastei?
ersetze im script DECT_STECKDOSE_1.txt durch den namen der erzeugten datei inkl. dateiendung. also z.b. blablabla.jpg

wenn du das von hand testen willst und dabei das script verwenden willst muss die datei folgendes enthalten
== $0

oder
== $1

== $ deshalb weil das script diesen string sucht [i = InStr(inzeile,"== $")]. i ist die position wo der gesuchte string beginnt falls er gefunden wird.
ist i >0 bedeutet das, dass der string gefunden wurden. dann wird der code hinter If i > 0 ausgeführt.

hinter diesem string ist der zustand der der variablen zugewiesen wird. [Mid(inzeile,i + 4)]
i ist die startposition. + 4 deshalb weil der zustand ja am ende des gesuchten strings steht.

syntax mid:
diese_variable_zerlegen = "abc123"
startposition = 3
mid(diese_variable_zerlegen,startposition) wird hinter startposition nichts weiter angegeben wird bis zum ende der variablen zerlegt. ergebnis wäre c123
länge = 2
mid(diese_variable_zerlegen,startposition,länge) ergebnis wäre c1
 
Zuletzt bearbeitet:
Thema wget:

die erzeugte Datei heißt -> homeautoswitch.lua@ain=087610415772&switchcmd=getswitchstate <- die Datei hat keine Endung -> müsste ja .txt haben um später einlesen .......
Der Schaltzustand 0 oder 1 steht in der Datei wenn ich Sie mit rechts klick öffne mit Editor

---------------------------------

Thema einlesen einer .txt Datei zum animieren zum testen:
Habe mal ein dein Skript genommen um nur mal zu testen ob ein Wert 0 oder 1 (dieser Wert steht in einer einer Textdatei) angezeigt wird zum animieren

angelegt: Skript "test_holen"
angelegt: Textdatei "holen_111.txt" (in dieser steht der Wert 0 oder 1 -> per Hand reingeschrieben zum testen -> wird ja später generiert durch weget o.ä.)
angelegt: Variable "holen_abcd" zum animieren
....
Dim fso, indatei, inzeile, i, dect_status_temporaer

Set fso = CreateObject("Scripting.FileSystemObject")

'datei einlesen und auswerten
Set indatei = fso_OpenTextFile("s:\holen_111.txt",1) 'name der heruntergeladenen datei
Do While indatei.AtEndOfStream <> True
inzeile = indatei.ReadLine
i = InStr(inzeile,"== $") 'hinter diesem gesuchten string ist der zustand
If i > 0 Then

SmartTags("holen_abcd") = Mid(inzeile,i + 4)
dect_status_temporaer = Mid(inzeile,i + 4)
End If
Loop
....

Ablauf:

- Skript starten durch Schaltfläche (Ereigniss Klick -> test_holen (Skript))
- Animation durch Kreis oder EA Feld siehe Bilder

KREIS_1.jpgEA_FELD_1.jpg

Leider änder sich die Farbe im Kreis noch wird der Wert im EA Feld angezeigt :oops:

Wäre super wenn Du mir bei den 2 Themen auf die Sprünge Helfen könntest, damit ich das verstehen kann wo die Fehler liegen (für zukünftige Spielereien ;))

Vielen Dank im Voraus!
 
Zurück
Oben