[Modul] Homematic Extended (Systemvariablen, Programme, Powermeter, u.v.m.)

Ich bin erstmal raus, meine SD-Karte des Pi zickt. Wenn es läuft, dann läuft es.

Gut, dass ich IPS davon abgetrennt hatte.

Gesendet von iPhone XS mit Tapatalk

Mein BananaPi war heute morgen auch tot.
Per Netzwerk nicht mehr erreichbar :frowning:
Habe da gerade auch eine böse Vorahnung in Richtung SD Karte… Jetzt läuft er, nach einem harten Reboot.
Michael

Ich habe jetzt bei 5.1 festgestellt das mein Klingel-Aus übers WebFront nicht mehr geht

if($_IPS['SENDER'] == "WebFront"){
	switch($_IPS['VALUE'])    {
		case 0: HM_WriteValueBoolean2(20868, '5105' /* IDENT von Klingel */, false);
        break;
        case 1: HM_WriteValueBoolean2(20868, '5105' /* IDENT von Klingel */, true);
        break;
    }
}

Im Debug von der SysVar Instanz steht beim Schalten

10.05.2019, 20:36:12 |           SysVar.exe | State=dom.GetObject(5105).State("false");
10.05.2019, 20:36:12 |             useNoSSL | 8181
10.05.2019, 20:36:12 |           SysVar.exe | CCU nicht erreichbar

Beim Schalten steht
Screenshot(4).png

IPS 5.1 - Docker im Host Mode
RaspberryMatic mit 3.45.7.20190504

Bin auf dem 5.1er Zweig

Die Meldung CCU nicht erreichbar sagt ja schon wo das Problem liegt.
Zu 99% liegt es an den Firewall Einstellungen der CCU.
Michael

Ja nur das man da ja nichts einstellen kann, habe das BackUp der CCU2 auf die RaspberryMatic eingespielt und vorher ging auch alles. k.A. ob der Pi da im Hintergrund noch was blockt.

In der CCU hatte ich auch mal Testweise Ports auf Offen gestellt und zusätzlich die 8181 noch unten eingetragen

Also Ports passen, habe die IP mit dem Port mal im Browser aufgerufen, das das geklappt hat habe ich mal ein kleines Script geschrieben

<?php

$xmlData = file_get_contents('http://192.168.178.108:8181');
echo  $xmlData;
echo "Fertig";

?>

Auch da klappt der Zugriff

-->
  



  

  
  
    STARTPAGE_ERROR = "NoAjaxBrowser.htm";
    STARTPAGE_PC    = "pages/index.htm";

    USERCLIENT_PC  = 0;
    
    /**
     * Erstellt eine Instanz des XMLHttpRequest-Objekts.
     */
    createXMLHttpRequest = function()
    {
      var xmlHttp = null;
      
      if ( window.XMLHttpRequest )
      {
        xmlHttp = new XMLHttpRequest();
      }
      else if ( window.ActiveXObject )
      {
        try
        {
          xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (ex)
        {
          try 
          {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
          }
          catch (ex)
          {
            // leer
          }
        }
      }
      
      return xmlHttp;
    };  
  
    /**
     * Prüft, ob der Browser die Anforderungen für die HomeMatic WebUI erfüllt.
     */
    checkBrowser = function()
    {
      // Test auf AJAX-Unterstützung
      var xmlHttp = createXMLHttpRequest();
      if ( !xmlHttp ) 
      { 
        xmlHttp = null;
        return false; 
      }
      
      return true;
    };
    
    /**
     * Leitet den Anwender auf die enstprechende Startseite weiter.
     * Die Startseite ist abhängig vom gewählten Endgerät.
     *
     * Anmerkung:
     * Falls der Anwender nicht automatisch angemeldet wird, leitet der ReGa
     * Webserver die Anfrage auf die Loginseite um. Auch die Loginseite ist
     * vom jeweiligen Endgerät abhängig.
     */
    onLoad = function()
    {
      var sStartPage = STARTPAGE_ERROR;
    
      if (true == checkBrowser())
      {
        if(typeof(SessionId) === 'undefined') {
          sStartPage = STARTPAGE_PC;
        } else {
          sStartPage = STARTPAGE_PC + "?sid=" + SessionId;
        }
        sStartPage += '&client=3';

      }
    
      top.window.location.href = sStartPage;
    };
    
  




  
    Um die HomeMatic WebUI nutzen zu können, muss JavaScript in Ihrem Browser aktiviert sein.
  




Fertig

Wie immer wenn ich was poste, Problem gefunden :smiley:

Ich hatte ja hier den Screen gepostet

Da steht bei Zweit IPS 5.1, habe da mal auf das Zahnrad geklickt und dann war kein Zweig ausgewählt und es gibt auch keinen 5.1.
Habe dann auf master gewechselt und jetzt gehts wieder. K.A. wie das passiert ist :smiley:

Ich wollte gerade bei Systemvariablen auf Push umstellen. Leider fehlt in der Dokumenation genau das Bild woraus hervorgeht was auf der CCU genau einzustellen ist. Könnte mir jemand bitte nochmal kurz im Detail schildern wie das auf der CCU einzurichten ist, dass sobald sich eine Systemvariable ändert ein virtueller Taster ausgelöst wird.

Meinst Du das hier unter:
Programme & Zentralenverknüfnung

Das ist bei mir der Klingel-Aus-Schalter

Das Bild ist da, aber der Link in der readme falsch.
Danke fürs melden.
Das hier wird gesucht:

Michael

Danke, das habe ich gesucht. Jetzt funktioniert es auch nach der Einrichtung. Einfrage noch dazu, bei einer Zeichenkette reicht es ja wohl bei Aktualisierung auslösen zu wählen. Wie ist das z.B. bei einer Bool Variablen in der CCU? Muss ich da zwei mal einen Eintrag erstellen, für jeweils den Wert und bei Aktualisierung auslösen? Oder reicht es die Systemvariable einmal mit einem der beiden Werte anzugeben, damit bei einer Änderung IP-Symcon benachrichtigt wird?

Aktualisierung ist bei der CCU unabhängig vom Wert. Ein Eintrag reicht somit.
Michael

Hi,

beim Starten von IPS erhalte ich im Logfile folgende Meldung:


31.10.2019 10:15:47 | 00000 | SUCCESS | Kernel               | *** IPS BETRIEBSBEREIT
...
31.10.2019 10:15:53 | 00000 | ERROR   | KernelMT             | InstanzManager: Fehler bei Instanz #57425, Meldung IPS_KERNELSTARTED: <br />
<b>Fatal error</b>:  Uncaught TypeError: json_decode() expects parameter 1 to be string, bool given in C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php:171
Stack trace:
#0 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(171): json_decode(false)
#1 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(248): HomeMaticRFInterfaceSplitter->GetInterfaces()
#2 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(65): HomeMaticRFInterfaceSplitter->ReadRFInterfaces()
#3 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(79): HomeMaticRFInterfaceSplitter->ApplyChanges()
#4 C:\ProgramData\Symcon\modules\IPSHomematicExtended\libs\HMBase.php(82): HomeMaticRFInterfaceSplitter->KernelReady()
#5 C:\Windows\System32\-(3): HMBase->MessageSink(0, 0, 10001, Array)
#6 {main}
  thrown in <b>C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php</b> on line <b>171</b><br />
Abort Processing during Fatal-Error: Uncaught TypeError: json_decode() expects parameter 1 to be string, bool given in C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php:171
Stack trace:
#0 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(171): json_decode(false)
#1 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(248): HomeMaticRFInterfaceSplitter->GetInterfaces()
#2 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(65): HomeMaticRFInterfaceSplitter->ReadRFInterfaces()
#3 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(79): HomeMaticRFInterfaceSplitter->ApplyChanges()
#4 C:\ProgramData\Symcon\modules\IPSHomematicExtended\libs\HMBase.php(82): HomeMaticRFInterfaceSplitter->KernelReady()
#5 C:\Windows\System32\-(3): HMBase->MessageSink(0, 0, 10001, Array)
#6 {main}
  thrown
   Error in Script C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php on Line 171

#57425 ist die HMRFInterfaceSplitter Instanz.

Ich bin mir nicht sicher, aber früher ist mir das nicht aufgefallen. Was könnte die Ursache sein? Vielleicht gehört dies auch in den Beta Bereich.

Gruß

Burkhard

Ist zu dem Zeitpunkt der Homematic Socket schon verbunden?
Das sollte auch im Logfile auftauchen.
Wenn nein, ist das ein Fehler welchen ich noch abfangen bzw vorher prüfen muss ob der IO schon verbunden ist.
Wenn ja, dann liefert aus unbekannten Gründen der IO keine Antwort.
Das kann ich nur besser abfangen und dann wieder als Fehler ausgeben.
Michael

Danke für den Hinweis!

Im Logfile gibt es zur Homematic Instanz folgende Einträge:

Line 2696: 31.10.2019 10:15:26 | 24612 | MESSAGE | HomeMatic Socket     | Erstelle...
Line 2697: 31.10.2019 10:15:26 | 24612 | MESSAGE | HomeMatic Socket     | Starte Eventserver...
Line 2698: 31.10.2019 10:15:26 | 24612 | MESSAGE | HomeMatic Socket     | Erstelle Ereignis-Thread...
Line 5838: 31.10.2019 10:25:37 | 24612 | ERROR   | TimerPool            | HomeMatic Socket (KeepAlive): Die Netzwerkverbindung wurde durch das lokale System getrennt.
Line 5917: 31.10.2019 10:26:30 | 24612 | MESSAGE | HomeMatic Socket     | Einstellungen gespeichert
Line 5918: 31.10.2019 10:26:30 | 24612 | MESSAGE | HomeMatic Socket     | Stoppe Eventserver...
Line 5919: 31.10.2019 10:26:30 | 24612 | MESSAGE | HomeMatic Socket     | Beende Ereignis-Thread...
Line 5920: 31.10.2019 10:26:30 | 24612 | MESSAGE | HomeMatic Socket     | Starte Eventserver...
Line 5921: 31.10.2019 10:26:30 | 24612 | MESSAGE | HomeMatic Socket     | Erstelle Ereignis-Thread...
Line 5922: 31.10.2019 10:26:30 | 24612 | MESSAGE | Event Control        | Wiederverbinden [HomeMatic Socket] erfolgreich
Line 6147: 31.10.2019 10:28:45 | 24612 | ERROR   | TimerPool            | HomeMatic Socket (KeepAlive): Die Netzwerkverbindung wurde durch das lokale System getrennt.
Line 6219: 31.10.2019 10:29:30 | 24612 | MESSAGE | HomeMatic Socket     | Einstellungen gespeichert
Line 6220: 31.10.2019 10:29:30 | 24612 | MESSAGE | HomeMatic Socket     | Stoppe Eventserver...
Line 6221: 31.10.2019 10:29:30 | 24612 | MESSAGE | HomeMatic Socket     | Beende Ereignis-Thread...
Line 6222: 31.10.2019 10:29:30 | 24612 | MESSAGE | HomeMatic Socket     | Starte Eventserver...
Line 6223: 31.10.2019 10:29:30 | 24612 | MESSAGE | HomeMatic Socket     | Erstelle Ereignis-Thread...
Line 6224: 31.10.2019 10:29:30 | 24612 | MESSAGE | Event Control        | Wiederverbinden [HomeMatic Socket] erfolgreich
Line 6602: 31.10.2019 10:31:50 | 24612 | ERROR   | TimerPool            | HomeMatic Socket (KeepAlive): Die Netzwerkverbindung wurde durch das lokale System getrennt.
Line 6666: 31.10.2019 10:32:32 | 24612 | MESSAGE | HomeMatic Socket     | Einstellungen gespeichert
Line 6667: 31.10.2019 10:32:32 | 24612 | MESSAGE | HomeMatic Socket     | Stoppe Eventserver...
Line 6668: 31.10.2019 10:32:32 | 24612 | MESSAGE | HomeMatic Socket     | Beende Ereignis-Thread...
Line 6669: 31.10.2019 10:32:32 | 24612 | MESSAGE | HomeMatic Socket     | Starte Eventserver...
Line 6670: 31.10.2019 10:32:32 | 24612 | MESSAGE | HomeMatic Socket     | Erstelle Ereignis-Thread...
Line 6671: 31.10.2019 10:32:32 | 24612 | MESSAGE | Event Control        | Wiederverbinden [HomeMatic Socket] erfolgreich

Auch sehe ich, dass es im weiteren Verlauf noch weitere Fehlermeldungen gibt:

31.10.2019 10:16:05 | 57425 | ERROR   | TimerPool            | HMRFInterfaceSplitter (ReadRFInterfaces): <br />
<b>Fatal error</b>:  Uncaught TypeError: json_decode() expects parameter 1 to be string, bool given in C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php:171
Stack trace:
#0 C:\ProgramData\Symcon\modules\IPSHomematicExtended\RFInterfaceSplitter\module.php(171): json_decode(false)
...

Also macht wohl der Homematic Socket Probleme. Und in der Tat, er wechselt immer zwischen 102 und 200. Dazu mache ich einen eigenen Thread auf…

Wäre aber dennoch schön, wenn du die Situation ‚nicht geöffneter Socket‘ berücksichtigen könntest.

Burkhard

Ich bin eigentlich der Meinung das wird berücksichtigt…
Muss ich prüfen.
Michael

Ich habe - quick and dirty - vor der Teile 171 folgendes eingefügt:

if ($ResultJSON === false){
    return [];
}

Damit ist jetzt erst einmal Ruhe :slight_smile:

Aber es ist schon seltsam, dass er überhaupt dorthin kommt. Denn kurz vorher steht bereits

if (!$this->HasActiveParent()) {
    trigger_error($this->Translate("Instance has no active parent instance!"), E_USER_NOTICE);
    return array();
}

Ich kann mir vorstellen, das diese Anfrage noch gesendet wird, wenn der Socket verbunden ist.
Und dann kommt müll zurück und dadurch trennt Symcon die Verbindung.
Ist aber nur eine Vermutung.
Man könnte jetzt natürlich versuchen das Datenpaket mitzuschneiden.
Michael

Das vermute ich auch, da auch meine Instanzüberwachung erst kurz darauf anschlägt.

In der Debugausgabe des Sockets habe ich bislang nichts gesehen …

Ohne Wiresharke o.ä. wird man das auch nicht finden.
Michael