Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste Überarbeitung Beide Seiten der Revision
manuals:symcon:mqtt-integration [2018/09/22 18:42]
admin
manuals:symcon:mqtt-integration [2018/09/22 18:50]
admin [MQTT in Symcon Einbinden]
Zeile 12: Zeile 12:
  
 **Auch müssen alle Werte in <​spitzen>​ Klammern durch die Eigenen ersetzt werden!** **Auch müssen alle Werte in <​spitzen>​ Klammern durch die Eigenen ersetzt werden!**
-</​WRAP>​ 
- 
-<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) 
 </​WRAP>​ </​WRAP>​
  
Zeile 45: Zeile 41:
  
 ===== Pakete Installieren ===== ===== Pakete Installieren =====
 +Einen MQTT Broker z.B. das Paket mosquitto Installieren 
 +  aptitude install mosquitto mosquitto_pub mosquitto_sub 
 +  ​
 ===== Symcon Vorbereiten ===== ===== Symcon Vorbereiten =====
-Nach der Installation ​von IPS dort in die Kategorie anlegen ​+ 
 +==== MQTT Client in Symcon Installieren ==== 
 +Zum Senden von Daten per MQTT_Publish aus jedem script: 
 +  https://​github.com/​mkretzschmar/​SymconMQTT 
 + 
 +Nach der Installation ​eine Kategorie anlegen ​
   Datenpunkte/​MQTT/​devices   Datenpunkte/​MQTT/​devices
-hier das switch ​Script damit sind "​boolean"​ Datenpunkte (einfach "​True"​ oder "​False"​ beim ersten schreiben in dem mqtt broker erstellt die Variable in Symcon und verlinkt diese mit dem Script und ist somit sofort Bedienbar.+   
 +In diesem Knoten werden dann alle Geräte und Datenpunkte Automatisch Abgelegt, nun gehen wir aber wieder zu  
 +  Datenpunkte/​MQTT 
 +und erstellen ​das Script ​"​mqtt_switch_relais", ​damit sind "​boolean"​ Datenpunkte (einfach "​True"​ oder "​False"​ beim ersten schreiben in dem mqtt broker erstellt die Variable in Symcon und verlinkt diese mit dem Script und ist somit sofort Bedienbar.
  
-Ich lege es nach:+Die Datei:
   Datenpunkte/​MQTT/​mqtt_switch_relais"​   Datenpunkte/​MQTT/​mqtt_switch_relais"​
  
 +mit folgendem Inhalt:
 <code php><?​ <code php><?​
  $d = false; $msg = "";​  $d = false; $msg = "";​
Zeile 99: Zeile 106:
 ?> ?>
 </​code>​ </​code>​
 +
  
 Das Eigentliche Script welces die Daten per RPC vom mqttwarn Daemon entgegennimmt und ablegt, in dem nicht Vergessen die ID's in den ersten Zeilen durch die Eigenen ersetzen: Das Eigentliche Script welces die Daten per RPC vom mqttwarn Daemon entgegennimmt und ablegt, in dem nicht Vergessen die ID's in den ersten Zeilen durch die Eigenen ersetzen:
Zeile 112: Zeile 120:
 // get value from mqtt variable // get value from mqtt variable
 if( array_key_exists("​payload",​ $_IPS)){ if( array_key_exists("​payload",​ $_IPS)){
- $var = $_IPS['​payload'​]; ​ 
- $varsplit = explode(";",​ $var); 
   
  $topic = $_IPS['​topic'​]; ​  $topic = $_IPS['​topic'​]; ​
Zeile 119: Zeile 125:
  $payload = $_IPS['​payload'​];​  $payload = $_IPS['​payload'​];​
  
- //​if(count($varsplit)>​1){ + $payload = str_replace(array("​\r",​ "​\n"​),​ '',​ $payload);
- //$topics = explode("/",​ $varsplit[0]);​ +
- //​$topic=$varsplit[0];​ +
- //​$payload=$varsplit[1];​ +
- $payload = str_replace(array("​\r",​ "​\n"​),​ '',​ $payload);+
  
- if ($d){ $msg .= "​topic:​ $topic\npayload:​ $payload\n";​ }+ if ($d){ $msg .= "​topic:​ $topic\npayload:​ $payload\n";​ }
  
- // Datentyp der payload herausfinden und ins Format für IPS Übersetzen + // Datentyp der payload herausfinden und ins Format für IPS Übersetzen 
- $contType = 99; + $contType = 99; 
- if (is_float($payload+0)){ + if (is_float($payload+0)){ 
-    //Float +    //Float 
- $contType = 2;+ $contType = 2
 +
 + if (($contType == 99) and (is_numeric($payload))){ 
 +    //​Integer 
 + $contType = 1; 
 +
 + if (($contType == 99) and (is_string($payload))){ 
 + if ((strtolower($payload) == "​true"​) or (strtolower($payload) == "​false"​)){ 
 +    //​Boolean 
 + $contType = 0; 
 + } else { 
 +    //​String 
 + $contType = 3;
  }  }
- if (($contType ​== 99) and (is_numeric($payload))){ +
-    //​Integer + $idf = $idParent;​ 
- $contType ​1;+ //Pfad durchlaufen und Prüfen ob die Kategorien / Variablen vorhanden sind und bei bedarf Anlegen 
 + for($i = 0; $i < count($topics);​ $i++){ 
 + if ($== (count($topics-1)){ 
 + $type = 2; 
 + } else { 
 + $type 0;
  }  }
- if (($contType == 99) and (is_string($payload))){ + $idf = checkIfElementExists($idf,​ $type, $topics[$i],​ $contType);​ 
- if ((strtolower($payload) == "​true"​) or (strtolower($payload) == "​false"​)){ +
-    //​Boolean +  
- $contType = 0; + if($d){ 
- } else { +    $msg .= "​Variablen Type. "​.$contType."​\n";​ 
-    //​String +    $msg .= "Set Itend to: "​."​mqtt_"​.str_replace("/",​ "​_",​ $topic)."​\n";​ 
- $contType = 3; +
-+  
-+ IPS_SetIdent($idf,​ "​mqtt_"​.str_replace("/",​ "​_",​ $topic)); 
- $idf = $idParent;​ +  
- //Pfad durchlaufen und Prüfen ob die Kategorien / Variablen vorhanden sind und bei bedarf Anlegen + mqset($idf,​ $payload);
- for($i = 0; $i < count($topics);​ $i++){ +
- if ($i == (count($topics) -1)){ +
- $type = 2; +
- } else { +
- $type = 0; +
-+
- $idf = checkIfElementExists($idf,​ $type, $topics[$i],​ $contType);​ +
- +
-  +
- if($d){ +
-    $msg .= "​Variablen Type. "​.$contType."​\n";​ +
-    $msg .= "Set Itend to: "​."​mqtt_"​.str_replace("/",​ "​_",​ $topic)."​\n";​ +
- +
-  +
- //​IPS_SetIdent($idf,​ "​mqtt;"​.$topic);​ +
- IPS_SetIdent($idf,​ "​mqtt_"​.str_replace("/",​ "​_",​ $topic)); +
-  +
- //if (GetValue($idf) != $payload){ +
- //Wert Setzen +
- mqset($idf, $payload);+
 } }
 if ((strlen($msg) > 0) and ($d)){ if ((strlen($msg) > 0) and ($d)){
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki