+ Antworten
Seite 4 von 9 ErsteErste ... 2 3 4 5 6 ... LetzteLetzte
Ergebnis 31 bis 40 von 89
  1. #31
    Registriert seit
    Dec 2010
    Ort
    Thüringen
    Beiträge
    219

    Gibt es nun eigentlich zu IPS und MQTT irgendwelche Neuigkeiten? Ich versuche ja aus den ganze Scripts hier schlau zu werden, aber leider ohne Erfolg.
    Ich habe ein ESPEasy Modul am Laufen, welches Daten an einen Mosquitto Broker sendet. Das funktioniert super und ich kann auf den Broker auch mit MQTT.fx zugreifen und mir alles anschauen. Lediglich bei der IPS Integration scheitere ich. Da gibts ja nun etliche Module und Scripts, aber ehrlich gesagt habe ich keines davon zum Laufen gebracht. Bei kaum einem ist eine Anleitung dabei.
    In IPS habe ich jetzt einen IPS Publisher als I/O Instanz gefunden, der aber offensichtlich nur Daten an den Broker senden kann. Gibt es überhaupt eine "einfache" Möglichkeit, dass ich mir eine Variable anlege und die mit Daten, die vom Broker abgeholt werden updaten lasse?
    Warum wird MQTT so stiefmütterlich von IPS gehandhabt?

  2. #32
    Registriert seit
    Mar 2011
    Beiträge
    221

    Hi,

    also ich empfange und sende Daten via Thomas MQTT Implementierung.
    https://github.com/thomasf68/IPS_MQTT
    Einfach das Modul laden, eine Instanz erstellen und dann mit MQTT-Publish() senden und innerhalb eines "Handle"-script empfangen.
    Klappt bei mir soweit recht zuverlässig!
    IP-Symcon Prof auf dem raspi, diverse 1-Wire Counter (DS2423) und diverse Raumtemperatursensoren DS18S20 an einem LinkUSB, FritzBoxen 7490, selbstgebauter EMS-Bus-Logger, HM-Aktoren an CCU2 & LAN-Adapter,ESP8266-Boards, 2 iPads zur Steuerung, R40Li goes IPS und noch tausende weitere Ideen....nur nie Zeit

  3. #33
    Registriert seit
    Dec 2010
    Ort
    Thüringen
    Beiträge
    219

    Ok. ICh hab das Modul installiert. Die Verbindung zum Client Socket (brokerIP:1883) hergstellt und das Beispiel Handle Script mit angepasster ModulID verwendet. Allerdings passiert nix. Im Beispielscript werden ja auch Variablen angelegt. Die MQTT Nachrichten kommen zum Beispiel auf Energie/Gas/Pulse am Broker an. Wo muss ich ihm mitteilen welche Nachrichten er abbonieren soll? Das ist da momentane Handle Script welches ich verwende.
    PHP-Code:
    <?


        
    //IPS_LogMessage(IPS_GetName($_IPS['SELF'])." ".$_IPS['SELF'],print_r($_IPS,true));

        
    if($_IPS['SENDER']=='MQTT_GET_PAYLOAD'){

                
    $msg $_IPS['MSG'];
                
    $topic explode("/"$_IPS['TOPIC']);
                
    $id_parent 0;
                
    $last count($topic)-1;
                
    $type $topic[$last];

                switch (
    $type) {
                        case 
    '0':
                        case 
    '1':
                        case 
    '2':
                        case 
    '3':
                                foreach(
    $topic as $i => $vname){
                                        
    $id = @IPS_GetObjectIDByName($vname$id_parent);
                                        if(
    $id===false){
                                        if(
    $last== $i){
                                                        
    $id$id_parent;
                                }elseif(
    $last -== $i){
                                        
    $id IPS_CreateVariable($type);      
                                        
    IPS_SetName($id$vname); 
                                        
    IPS_SetParent($id$id_parent);
                                    }else{
                                        
    $id IPS_CreateCategory();      
                                        
    IPS_SetName($id$vname); 
                                        
    IPS_SetParent($id$id_parent);
                                    }
                                        }
                                        
    $id_parent $id;
                                }
                                
    SetValue($id,$msg); 
                                break;
                        default:
                                
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." ".$_IPS['SELF'],"Topic '".$_IPS['TOPIC']. "' enthält keine Typinfo");        
                }

        }

        if(
    $_IPS['SENDER']=='MQTT_CONNECT'){
                
    $topic "#";                                                        
                
    MQTT_Subscribe30778$topic0);      // ID Anpassen !!!
        
    }


    ?>

  4. #34
    Registriert seit
    Aug 2014
    Beiträge
    602

    Hallo Thomas,

    wie sehen Deine Topics aus (vollständiger Pfad)? Wenn Du Dir unsicher über den Eingang bist, baue mal ein
    PHP-Code:
    //var_dump($topic); 
    in Dein Script ein.
    Bei meinen Topics (bei mir in $topic[1]) kommen Strings an. Der interessante Wert (bei mir Temperaturen oder Anzahl der Sensoren) steht in Message (da wäre dann erst mal ein echo gut). Im Case-Zweig verzweige ich also nach $topic[1] und behandle dann den int/float-Wert.

    Grüße, Gerhard
    LCN, LCN-PCHK, piVCCU auf Raspberry Pi, IPSView

  5. #35
    Registriert seit
    Dec 2010
    Ort
    Thüringen
    Beiträge
    219

    Aktueller Stand.
    Das oben aufgeführte Script wird bei mir nach kurzer Zeit als fehlerhaft markiert und scheint dann gar nicht mehr ausgeführt zu werden. Ich habe lediglich die Log Meldung oben aktiviert indem ich die Kommentarzeichen entfernt habe.

    Die Verbindung zum MQTT Broker über den MQTT Client und den zugehörigen Socket steht auch, Scheint aber komischerweise immer abzubrechen, wenn das Script ausgeführt wird.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Client.JPG 
Hits:	71 
Größe:	62.4 KB 
ID:	42739Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	logs.JPG 
Hits:	90 
Größe:	37.2 KB 
ID:	42740Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Script.JPG 
Hits:	72 
Größe:	102.9 KB 
ID:	42741Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Socket.JPG 
Hits:	73 
Größe:	37.5 KB 
ID:	42742

    Und so schauen die Meldungen vom MQTTClient aus, die er im debug ausgibt.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Log2.JPG 
Hits:	63 
Größe:	129.7 KB 
ID:	42743
    Geändert von ThomasWest69 (16.02.18 um 10:41 Uhr)

  6. #36
    Registriert seit
    Aug 2014
    Beiträge
    602

    Hallo Thomas,

    mußte gerade feststellen, dass das Modul von Thomas zur Zeit bei mir nicht arbeitet, statt dessen beim ersten Start einen Fehler produziert und dann nichts mehr tut.
    Wenn ich da weiter bin, melde ich mich wieder.

    Welche IPS-Version hast Du?

    Grüße, Gerhard
    LCN, LCN-PCHK, piVCCU auf Raspberry Pi, IPSView

  7. #37
    Registriert seit
    Dec 2010
    Ort
    Thüringen
    Beiträge
    219

    Ich update regelmäßig auf die neuste Version, also aktuell die 4.4.

  8. #38
    Registriert seit
    Aug 2014
    Beiträge
    602

    Hallo Thomas,

    es gibt in Deinem Script auch noch eine Passage zum Connect:
    PHP-Code:
    if($_IPS['SENDER']=='MQTT_CONNECT')
    {
        
    $topic "myTOPIC/#";
        
    //echo "connect\n";
        
    MQTT_Subscribe($dieses_script_id$topic0);

    Mit dem echo kannst Du im Meldungsfenser sehen, ob die Verdindung zustande gekommen ist. Und Dein 'myTOPIC' muss in den Debugfenstern von Client und Splitter auftauchen - bei Dir sehe ich da noch nichts.

    Grüße, Gerhard
    ps: wer sendet die topics? In welcher Form?
    LCN, LCN-PCHK, piVCCU auf Raspberry Pi, IPSView

  9. #39
    Registriert seit
    Aug 2014
    Beiträge
    602

    Hallo Thomas,

    mein MQTT läuft wieder - jetzt habe ich etwas mehr Zeit. Zuerst mal Allgemeines: Bei MQTT gibt es 3 Teile,
    - einen (oder mehr) Publisher, der die Daten in der Form '/Topic/Message' dem Broker bereit stellt
    - einen Broker, der Daten von den Publishern bekommt und an Subscriber verteilt
    - einen (oder mehr) Subscriber, der beim Broker 'Topics' abonniert

    Dein Publisher liefert also 'Energie/Gas/Pulse'. Die Message dabei sind wolhl die Pulse, der Rest sind die Topics. Dein Subscriber muss sich also für diesen Pfad beim Broker-connect anmelden:
    PHP-Code:
    if($_IPS['SENDER']=='MQTT_CONNECT')
    {
        
    $topic "Energie/#";
        
    //echo "connect\n";
        
    MQTT_Subscribe($dieses_script_id$topic0);

    Nach dem connect werden die Daten abgefragt:
    PHP-Code:
    if($_IPS['SENDER']=='MQTT_GET_PAYLOAD')
    {
       
    $topic $_IPS['TOPIC'];  // die topics: Energie/Gas    
          //echo $topic."\n";
       
    $topic_parts explode('/'$topic);
       
    $msg $_IPS['MSG'];    // Pulse
          //var_dump($topic_parts);

       
    if($topic_parts[0] == "Energie")
       {
          switch(
    $topic_parts[1])
          {
             case 
    "Gas":            // Unter-Topic Gas
             
    {
             
    SetValueInteger($deine_pulse_id$msg);
                 break;
        }
        case 
    "Strom":        // Unter-Topc Strom etc
        
    {
             ....
        }
        default: break;
         }
      }

    Ich hoffe, es ist nun etwas verständlicher geworden. In den Debug-Informationen müssen Topics und Message auftauchen:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	client.JPG 
Hits:	43 
Größe:	44.3 KB 
ID:	42757Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	splitter.JPG 
Hits:	47 
Größe:	85.1 KB 
ID:	42758

    Grüße, Gerhard
    LCN, LCN-PCHK, piVCCU auf Raspberry Pi, IPSView

  10. #40
    Registriert seit
    Dec 2010
    Ort
    Thüringen
    Beiträge
    219

    Hallo Gerhard

    Danke für diene Ausführungen. zunächst habe ich einen fehler bei mir gefunden. Im MQTT_Subscribe die falsche ID drin. Ich hatte die ID der MQTT Client Instanz und nicht die meines Scripts. Die Verbindung zum Broker steht zumindest laut den Debug-Meldungen im MQTT Client. Doet steht
    "Connected to broker ok"
    Beim broker komen auch meldungen vom Publischer (ESP8266 mit ESPEasy) an (siehe Bild vom MQTTfx Programm).

    Irgendwie scheint aber das Subscribe nicht zu funktionieren. Er Empfängt zwar was, aber die Datenblöcke sind komplett leer.
    Data arrived:{"DataID":"{018EF6B5-AB94-40C6-AA53-46943E824ACF}","Buffer":"Ð\u0000"}

    Mein Script schaut jetzt so aus.
    PHP-Code:
    <?
    $dieses_script_id 
    =16881;
    $gas_pulse_id     =29951;
    $strom_pulse_id   =10049;
     

        
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." ".$_IPS['SELF'],print_r($_IPS,true));


    if(
    $_IPS['SENDER']=='MQTT_GET_PAYLOAD')
    {
       
    $topic $_IPS['TOPIC'];  // die topics: Energie/Gas    
          
    echo $topic."\n";
       
    $topic_parts explode('/'$topic);
       
    $msg $_IPS['MSG'];    // Pulse
          
    var_dump($topic_parts);

       if(
    $topic_parts[0] == "Energie")
       {
          switch(
    $topic_parts[1])
          {
             case 
    "Gas":            // Unter-Topic Gas
             
    {
             
    SetValueInteger($gas_pulse_id$msg);
                 break;
        }
            case 
    "Strom":        // Unter-Topc Strom etc
            
    {
             
    SetValueInteger($strom_pulse_id$msg);
                 break;
                 
            }
        default: break;
         }
      }
    }  

    /*    if($_IPS['SENDER']=='MQTT_GET_PAYLOAD'){

                $msg = $_IPS['MSG'];
                $topic = explode("/", $_IPS['TOPIC']);

                IPS_LogMessage(IPS_GetName($_IPS['SELF'])." ".$_IPS['SELF'],$topic);

                $id_parent = 0;
                $last = count($topic)-1;
                $type = $topic[$last];

                switch ($type) {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                                foreach($topic as $i => $vname){
                                        $id = @IPS_GetObjectIDByName($vname, $id_parent);
                                        if($id===false){
                                        if($last== $i){
                                                        $id= $id_parent;
                                }elseif($last -1 == $i){
                                        $id = IPS_CreateVariable($type);      
                                        IPS_SetName($id, $vname); 
                                        IPS_SetParent($id, $id_parent);
                                    }else{
                                        $id = IPS_CreateCategory();      
                                        IPS_SetName($id, $vname); 
                                        IPS_SetParent($id, $id_parent);
                                    }
                                        }
                                        $id_parent = $id;
                                }
                                SetValue($id,$msg); 
                                break;
                        default:
                                IPS_LogMessage(IPS_GetName($_IPS['SELF'])." ".$_IPS['SELF'],"Topic '".$_IPS['TOPIC']. "' enthält keine Typinfo");        
                }

        }
    */
        
    if($_IPS['SENDER']=='MQTT_CONNECT'
        {
        
    $topic "Energie/#";
        echo 
    "connect\n";
        
    MQTT_Subscribe($dieses_script_id$topic0);
        }  
        

    ?>
    Bei dir steht da was drin.Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	MQTTfx.JPG 
Hits:	65 
Größe:	75.4 KB 
ID:	42759
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	NAchrichten.JPG 
Hits:	57 
Größe:	86.8 KB 
ID:	42760

Ähnliche Themen

  1. iPhone Push Notification von IP-Symcon
    Von xxxchris im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 99
    Letzter Beitrag: 24.10.12, 20:19
  2. W-LAN : externe Antenne oder Repeater ?
    Von roadsterhh im Forum Alles rund um den PC
    Antworten: 46
    Letzter Beitrag: 22.05.12, 08:41
  3. externe Log-Daten importieren
    Von Raketenschnecke im Forum Skripte, PHP, SQL
    Antworten: 20
    Letzter Beitrag: 22.10.11, 12:28
  4. DUG Tool - externe Daten hínzufügen
    Von stevih im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 14.12.09, 22:21