Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision 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:49]
admin
Zeile 45: Zeile 45:
  
 ===== 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 110:
 ?> ?>
 </​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 124:
 // 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 129:
  $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