Wago SPS und Google Home/Alexa

Schakus

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Freunde der SPS!
Ich habe mein Smarthome mit einer Wago SPS und diversen Relais realisiert. Dazu KNX und der ganze Kram.

Nun würde ich gerne per Google Home/Alexa/... auch Outputs steuern können, um zum Beispiel Licht zu schalten.
Die erste Idee war mit Modbus und das via ioBroker dann Richtung Google. Modbus ist jedoch veraltet und möchte ich eigentlich nicht mehr verwenden.

Ich habe OCB der Wago hinzugefügt und kann per Software auf dem PC auch Relais schalten.
Jedoch habe ich nur ein Plugin für ioBroker gefunden, welches leider nicht korrekt installiert werden kann: https://github.com/ioBroker/ioBroker.opcua

Welche Möglichkeiten hätte ich noch? Vielleicht eine andere, einfachere Lösung?

Grüße und Danke!
 
Hallo Schakus,

Naja Modbus ist genauso veraltet wie KNX :ROFLMAO:
Wenn man deiner Logik folgt, dann hättest du auch KNX durch irgendwelche MQTT Sensoren / Aktoren ersetzen müssen :ROFLMAO:

Spass beiseite:
Schau dir mal Node RED an. Damit funktioniert OPC UA problemlos. Google oder Alexa ffunktionieren auch damit.
Wenn du ioBroker weiterhin verwenden willst, dann kannst du auch Node RED zusammen mit ioBroker verwenden.
Es gibt von ioBroker ein Node RED-Modul.
Diesen Weg nutze ich momentan. Als Node RED als Gateway zwischen Wago und ioBroker.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey blockmove, ich wollte schon lange mal was mit NodeRed machen aber die Dokumentation dazu ist irgendwie ein wenig...wünschenswert. Hast du da was gutes?
 
Danke für deine Antwort! Nodered habe ich auch schon angesehen.
Ich habe mir vorhin Home Assistant angesehen. Der kann direkt auf das KNX Interface zugreifen. Leider habe ich noch nicht vertanden, wie man das machen soll.

Kannst du uns die Links teilen, welche für dich hilfreich waren? Ggf. einen Programmschnipsel schicken? Das wäre super.
 
Aber wirklich eine Dokumentation für z.B. ein "inject" oder ein "http in" in der beschrieben ist wie man die Blöcke beschalten muss gibt es nicht?

Node RED setzt auf Node.js auf. Also im Prinzip Java Script.
Bei Parametern wird sehr viel JSON verwendet. Somit sind Grundkenntnisse in Java Script und JSON nicht hinderlich :p
 
Node RED setzt auf Node.js auf. Also im Prinzip Java Script.
Bei Parametern wird sehr viel JSON verwendet. Somit sind Grundkenntnisse in Java Script und JSON nicht hinderlich :p

Joah, weiss ich und hab ich. Trotzdem wärs nice wenn etwas besser erklärt wäre für was denn die einzelnen Eingabefelder sind. :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal ein Screenshot von Node RED zur Kopplung von ioBroker zu meiner Wago

NodeRED_Screenshot.jpg

Hier der Configuration-Node zur Wago

OPCUA_IIoT_Configuration-Node.png

Und hier der Node zum Lesen einer globalen Variablen

OPC UA Item: ns=4;s=|var|WAGO 750-8100 PFC100 CS 2ETH ECO.Application.GVL.xBadSonosOnOff

OPCUA_IIoT_Read_Page1.png
OPCUA_IIoT_Read_Page2.png

Zum Browsen der Steuerung verwende ich UAExpert
https://www.unified-automation.com/de/produkte/entwicklerwerkzeuge/uaexpert.html

Hier noch ein Code-Beispiel aus ioBroker
Code:
var Status;
var FavoriteNr;

// Sonos ein- bzw. ausschalten
on({id: 'node-red.0.EgBad_SonosOn', change: "ne"}, function (obj) {
    var value = obj.state.val;
    var oldValue = obj.oldState.val;
    if (value == true && Status.playbackState == 'STOPPED') {
        // Sonos Favariten[0] SWR3 anwählen
        console.log('Sonos Favariten[0] anwählen');
        SonosSetVolume('EgBad','20');
        SonosPlayFavorite('EgBad',SonosFavoriten[0]);
        FavoriteNr = 0;
    } else if (value == true && Status.playbackState == 'PLAYING') {
        // Sonos Stop
        console.log('Sonos Stop');
        SonosSetPause('EgBad');
        FavoriteNr = -1;
    }
});

// Sonos nächsten SonosFavoriten anwählen
on({id: 'node-red.0.EgBad_SonosNext', change: "ne"}, function (obj) {
    var value = obj.state.val;
    var oldValue = obj.oldState.val;
    if (value == true && Status.playbackState == 'PLAYING') {
        if (FavoriteNr < SonosFavoriten.length-1) {
            FavoriteNr++;
        } else {
            FavoriteNr = 0;
        }
        console.log('Sonos Favorite ' + SonosFavoriten[FavoriteNr] + ' angewählt');
        SonosSetVolume('EgBad','20');
        SonosPlayFavorite('EgBad',SonosFavoriten[FavoriteNr]);
    }
});

// Sonos Status zyklisch abfragen
schedule("*/2 * * * * *", function () {
    try {
        require("request")('http://192.168.1.12:5005/EgBad/state', function (error, response, result) {
            Status = JSON.parse(result);
            //console.log(Status.playbackState);
            setState('0_userdata.0.Sonos.EgBad.playbackState', Status.playbackState);
            if (Status.playbackState == 'STOPPED') {
                setState('node-red.0.EgBad_SonosPlayState',false,true);
            } else {
                setState('node-red.0.EgBad_SonosPlayState',true,true);        
            };
        }).on("error", function (e) {console.error(e);});
    } catch (e) { console.error(e); }
});

Gruß
Blockmove
 
Hallo

Da ich das Thema sehr interessant finde habe ich zum Testen mal ein System aufgesetzt.
Dabei musste ich allerdings feststellen, dass die Infos sehr verstreut im Netz sind.

Ich habe mich für eine Installation auf einem Wago PFC 200 entschieden, da ich hier keine weiteren Geräte benötige.
Ebenfalls sind keine Skill's oder Cloud Anwendungen nötig. (Ausgenommen Amazon zur Spracherkennung)

1. man nehme einen Wago PFC 200 der "Docker ready" ist. Dies sollte jeder Controller der 2. Generation erfüllen
2. Firmware aktualisieren. Die Firmware kann auf https://github.com/WAGO/pfc-firmware geladen werden. Sowohl als WUP als auch als Image.
3. Docker Installation laden. Auf https://github.com/WAGO/docker-ipk/releases gibt es die Installationsdatei und
auf https://github.com/WAGO/docker-documentation eine Anleitung zum download.
4. Docker installieren nach Anleidung. / Portainer ist nicht zwingend notwendig.
5. Nach der Installation von Docker unbedingt den DNS Server und die Zeiteinstellung prüfen!
6. Da Alexa später zwingend auf Port 80 kummuniziert, muss der Webserver auf einen anderen Port umziehen.
Dazu die Portvariable in der Datei
Code:
/etc/lighttpd/lighttpd.conf
ändern
7. Neustart durchführen damit die Portänderung wirksam wird.
8. Auf dem Controller mit einem Terminalprogramm (ich nutze Putty) als "root" einloggen (Initialpasswort ist "wago")
9. Node Red installieren
Code:
docker pull wagoautomation/node-red-iot
Auf https://hub.docker.com/r/wagoautomation/node-red-iot gibt es einige Infos dazu.
10. Der erste Start von Node Red
Code:
docker run -d --name wagonr -p 1880:1880  -v node_red_user_data:/data -v node_red_user_datacgroup:/sys/fs/cgroup wagoautomation/node-red-iot:latest
Im Browser <Controller Ip>:1880 aufrufen. Bis das Webinterface von Node Red verfügbar ist dauert es ein kleine weile!
11. Im Hamburger Menü Palette verwalten auswählen und "node-red-contrib-amazon-echo" und "node-red-contrib-modbustcp" installieren.
12 den "Hub" von Alexa auf das Arbeitsblatt ziehen und einen Device auf das Arbeitsblatt ziehen und verbinden. Den Hub auf Port 80 konfigurieren. (Es wird ein Philips HUE Hub emuliert.)
13. den Device mit einem Namen versehen (auf diesen Namen hört Alexa später) und Deploy'en
14. den Container von Node Red stoppen und löschen.
15. Über welchen Port Alexa die Geräte sucht konnte ich nicht feststellen. Darum alle Ports in den Container leiten:
Code:
docker run -d --name wagonr --network host -p 1880:1880  -v node_red_user_data:/data -v node_red_user_datacgroup:/sys/fs/cgroup wagoautomation/node-red-iot:latest
16. jetzt kann in der Alexa App das Device gesucht werden.
17. Wurde das Device gefunden den Container von Node Red stoppen und löschen.
18. Jetzt den Container mit den richtigen Ports anlegen und mit Systemstart starten:
Code:
docker run -d --name wagonr --restart always -p 1880:1880 -p 80:80 -v node_red_user_data:/data -v node_red_user_datacgroup:/sys/fs/cgroup wagoautomation/node-red-iot:latest
19. Jetzt kann in Node Red lustig drauf los programmiert werden.
20. Zur Kommunikation mit dem SPS Programm habe ich ModbusTCP verwendet. Es ist aber auch OPC UA oder vieles mehr möglich.

Einige nützliche Befehle:
Code:
Container List - docker container ps -a        // alle Container auch inaktive
Container Starten - docker start <containername>
Container Stoppen - docker stop <containername>
Container löschen - docker rm <containername>
Anzeige Portmapping - docker container port <containername>

Holger
 
Hallo holgermaik,
ich habe deine Punkte 12-16 und vorherige ausgeführt.
Nach dem Deployen auch stop und rm des containernamens (dein Punkt 14.) mit anschließendem Befehl wie unter 15.
Dann mit F5 den Browser refershed, und sieht m.E. immer noch ok aus:
1675425713656.png
Bei Punkt 16 (finde auf der Alexa App mit Samsung S20 nichts) habe ich leider keinen Erfolg. Gibt es mehr Details?
Oder habe ich was Grundsätzliches vergessen?

amazon-echo-hub: Den Port habe ich auf 80 gelassen und Process-Input auf "Process and output" eingestellt.

Danke,
hwwdr
 
Zuletzt bearbeitet:
Zurück
Oben