Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
manuals:symcon:mqtt-integration [2017/08/04 17:47] – paulg4h | manuals:symcon:mqtt-integration [2018/09/22 18:52] – admin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== MQTT in Symcon Einbinden ====== | ====== MQTT in Symcon Einbinden ====== | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Stand September 2018, IPS 4.4 | ||
+ | </ | ||
+ | |||
Diese Anleitung zeigt wie man auf einem Raspberry PI 3 das MQTT Protokoll über Mosquitto und mqttwarn in Symcon schreibend und per Modul auch Beschreibbar ist. Also in beide Richtungen Ereigniss Basierend kommuniziert so wie ich es schon seit einem halben Jahr Produktiv mit diversen Arduinos und ESP8266 (PubSub Library) einsetze. | Diese Anleitung zeigt wie man auf einem Raspberry PI 3 das MQTT Protokoll über Mosquitto und mqttwarn in Symcon schreibend und per Modul auch Beschreibbar ist. Also in beide Richtungen Ereigniss Basierend kommuniziert so wie ich es schon seit einem halben Jahr Produktiv mit diversen Arduinos und ESP8266 (PubSub Library) einsetze. | ||
Zeile 7: | Zeile 12: | ||
**Auch müssen alle Werte in < | **Auch müssen alle Werte in < | ||
- | </ | ||
- | |||
- | <WRAP center round info 90%> | ||
- | Nachdem Symcon ja Debian auf x86 Hardware nicht Unterstütz (werd ich nie verstehen) sondern nur Ubuntu und da die jetzt schon sehr alte 14.04er habe ich soeben ein paar Ergänzungen in der Anleitung gemacht und die MQTT integration nun auch auf Ubuntu Installiert (Stand Jänner 2017) | ||
</ | </ | ||
Zeile 40: | Zeile 41: | ||
===== Pakete Installieren ===== | ===== Pakete Installieren ===== | ||
+ | Einen MQTT Broker z.B. das Paket mosquitto Installieren | ||
+ | aptitude install mosquitto mosquitto_pub mosquitto_sub | ||
+ | | ||
+ | ===== Symcon Vorbereiten ===== | ||
+ | |||
+ | ==== MQTT Client zum Senden in Symcon Installieren ==== | ||
+ | Zum Senden von Daten per MQTT_Publish aus jedem script: | ||
+ | https:// | ||
+ | |||
- | ===== Symcon | + | ==== Mosquitto an Symcon |
- | Nach der Installation von IPS dort in einer Kategorie | + | |
- | < | + | Eine Kategorie |
- | <? | + | Datenpunkte/MQTT/devices |
+ | |||
+ | In diesem Knoten werden dann alle Geräte und Datenpunkte Automatisch erstellt / Aktualisiert, | ||
+ | Datenpunkte/ | ||
+ | und erstellen das Script " | ||
+ | |||
+ | Die Datei: | ||
+ | Datenpunkte/ | ||
+ | |||
+ | mit folgendem Inhalt: | ||
+ | < | ||
$d = false; $msg = ""; | $d = false; $msg = ""; | ||
$value = ""; | $value = ""; | ||
Zeile 90: | Zeile 110: | ||
</ | </ | ||
- | Das Zweite | + | |
- | <code php><? | + | Das Eigentliche Script welces die Daten per RPC vom mqttwarn Daemon entgegennimmt und ablegt, |
- | $d = false; $msg = ""; | + | |
+ | <code php> <? | ||
+ | $d = true; $msg = ""; | ||
//sample value: devices/ | //sample value: devices/ | ||
// mqtt topic to symcon variable id mapping | // mqtt topic to symcon variable id mapping | ||
$idParent = IPS_GetParent($_IPS[' | $idParent = IPS_GetParent($_IPS[' | ||
- | $archiveId = <archiv id> | + | $archiveId = 32289 / |
- | $relaisScriptId = <id des Relais scripts> | + | $relaisScriptId = 17676 / |
// get value from mqtt variable | // get value from mqtt variable | ||
- | $var = $_IPS[' | + | if( array_key_exists(" |
- | $varsplit | + | |
+ | $topic = $_IPS[' | ||
+ | $topics | ||
+ | $payload = $_IPS[' | ||
- | if(count($varsplit)> | ||
- | $topics = explode("/", | ||
- | $topic=$varsplit[0]; | ||
- | $payload=$varsplit[1]; | ||
$payload = str_replace(array(" | $payload = str_replace(array(" | ||
Zeile 135: | Zeile 155: | ||
for($i = 0; $i < count($topics); | for($i = 0; $i < count($topics); | ||
if ($i == (count($topics) -1)){ | if ($i == (count($topics) -1)){ | ||
- | $type = 2; | + | $type = 2; |
} else { | } else { | ||
$type = 0; | $type = 0; | ||
Zeile 147: | Zeile 167: | ||
} | } | ||
- | // | ||
IPS_SetIdent($idf, | IPS_SetIdent($idf, | ||
- | //Wert Setzen | ||
mqset($idf, | mqset($idf, | ||
- | |||
} | } | ||
- | if (strlen($msg) > 0){ | + | if ((strlen($msg) > 0) and ($d)){ |
| | ||
print $msg; | print $msg; | ||
- | } else { | + | } |
- | IPS_LogMessage(" | + | IPS_LogMessage(" |
- | } | + | |
} | } | ||
Zeile 169: | Zeile 185: | ||
function mqset($id, $value){ | function mqset($id, $value){ | ||
- | switch(IPS_GetVariable($id)[" | + | if(GetValue($id) != $value){ |
- | case 0: // boolean | + | switch(IPS_GetVariable($id)[" |
- | $val = filter_var($value, | + | case 0: // boolean |
- | SetValue($id, | + | $val = filter_var($value, |
- | break; | + | SetValue($id, |
- | case 1: // integer | + | break; |
- | $val = intval($value); | + | case 1: // integer |
- | SetValue($id, | + | $val = intval($value); |
- | break; | + | SetValue($id, |
- | case 2: // float | + | break; |
- | $val = floatval($value); | + | case 2: // float |
- | SetValue($id, | + | $val = floatval($value); |
- | break; | + | SetValue($id, |
- | case 3: // string | + | break; |
- | SetValue($id, | + | case 3: // string |
- | break; | + | SetValue($id, |
+ | break; | ||
+ | } | ||
} | } | ||
} | } | ||
Zeile 277: | Zeile 295: | ||
} | } | ||
?></ | ?></ | ||
- | |||
- | hier noch das switch Script damit sind " | ||
- | |||
- | <code php><? | ||
- | $d = false; $msg = ""; | ||
- | $value = ""; | ||
- | if ($d){ $msg .= " | ||
- | //if (($_IPS[' | ||
- | if ($_IPS[' | ||
- | | ||
- | if ($value == $_IPS[' | ||
- | $msg .= " | ||
- | $run = false; | ||
- | } | ||
- | } | ||
- | if (($_IPS[' | ||
- | | ||
- | } | ||
- | if ($d){ $msg .= " | ||
- | $id = $_IPS[' | ||
- | $topic = explode(";", | ||
- | if((strlen($topic) > 3) and ($run)){ | ||
- | switch(IPS_GetVariable($id)[' | ||
- | case 0: //boolean | ||
- | if($value == 1){ $value = " | ||
- | break; | ||
- | case 1: //Integer | ||
- | |||
- | | ||
- | case 2: //float | ||
- | |||
- | | ||
- | case 3: //string | ||
- | |||
- | | ||
- | } | ||
- | if($d){ $msg .= " | ||
- | MQTT_Publish(50729 / | ||
- | } | ||
- | |||
- | if ($d){ $msg .= " | ||
- | |||
- | | ||
- | | ||
- | } | ||
- | |||
- | ?></ | ||
- | |||
==== Mosquitto (MQTT Broker) ==== | ==== Mosquitto (MQTT Broker) ==== | ||
- | aptitude install mosquitto mosquitto-clients python-pip -y | + | aptitude install mosquitto mosquitto-clients python-pip |
| | ||
==== mqttwarn (mqtt daemon der alle Ereignisse zu Symcon weiterleitet) ==== | ==== mqttwarn (mqtt daemon der alle Ereignisse zu Symcon weiterleitet) ==== | ||
Zeile 402: | Zeile 372: | ||
[devices/#] | [devices/#] | ||
- | targets = http: | + | targets = log: |
template = ipsrpc.json | template = ipsrpc.json | ||
</ | </ | ||
Zeile 416: | Zeile 386: | ||
vi ipsrpc.json | vi ipsrpc.json | ||
mit folgendem Inhalt erstellen: | mit folgendem Inhalt erstellen: | ||
- | < | + | < |
- | | + | ' |
- | ' | + | ' |
- | ' | + | ' |
- | ' | + | ' |
- | ' | + | } |
- | } | + | |
%} | %} | ||
{{ data | jsonify }}</ | {{ data | jsonify }}</ |