Idee für verbesserte HmIP-Statusanzeige

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Benutzeravatar
Roland M.
Beiträge: 9738
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 251 Mal
Danksagung erhalten: 1358 Mal

Re: Idee für verbesserte HmIP-Statusanzeige

Beitrag von Roland M. » 26.05.2022, 00:07

Hallo Jérôme!
jp112sdl hat geschrieben:
25.05.2022, 22:33
Magnetische am längsten? Weiß ich aber nicht genau.
Ca. 24 Stunden... :(


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Benutzeravatar
jmaus
Beiträge: 9820
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 459 Mal
Danksagung erhalten: 1857 Mal
Kontaktdaten:

Re: Idee für verbesserte HmIP-Statusanzeige

Beitrag von jmaus » 26.05.2022, 00:37

g55 hat geschrieben:
25.05.2022, 23:38
Hier mal ne script-Ausgabe 21min nach dem Reboot mit meinen IP-Geräten (hatte ich mir vor Monden mal gebastelt für DC + Batt. + RSSI-check:
Wärst du bitte so freundlich und würdest diesen Skript hier mal öffentlich machen damit man darauf basierend vielleicht was bzgl. der Problematik hier machen kann.
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

g55
Beiträge: 235
Registriert: 02.10.2018, 19:24
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 59 Mal
Danksagung erhalten: 11 Mal

Re: Idee für verbesserte HmIP-Statusanzeige

Beitrag von g55 » 26.05.2022, 10:20

jmaus hat geschrieben:
26.05.2022, 00:37
g55 hat geschrieben:
25.05.2022, 23:38
Hier mal ne script-Ausgabe 21min nach dem Reboot mit meinen IP-Geräten (hatte ich mir vor Monden mal gebastelt für DC + Batt. + RSSI-check:
Wärst du bitte so freundlich und würdest diesen Skript hier mal öffentlich machen damit man darauf basierend vielleicht was bzgl. der Problematik hier machen kann.
ja gerne, hier das Skript :

Code: Alles auswählen

! v0.6 - holt die Einstellungen zur "zylischen Info" von HMIP-Geräten per GetParamSet
!
!
!- v0.3		(g55)	20.08.2021		Umstellung auf putparamset mit SDV4 (multiple parameters)
!- v0.5		(g55)	20.09.2021		DPs von CH=0 eingefügt : RSSi-Device + Voltage
!- v0.6		(g55)	26.04.2022		Filter nach Name, RSSI_PEER, Volt am Limit per * markiert
!-									RSSI Limit per "*" markiert, Voreinstellung iLimitRSSI
! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
object rCH = dom.GetObject(ID_CHANNELS);

!--- nach Gerätetyp filtern ... oder eben nix = "" = alle Gerätetypen  ---
string filterDevType = "broll";
! --- nach Gerätename filtern ... oder eben nix = "" = alle Namen  ---
string filterDevName = "";

!--- Limit für RSSI zum Markieren per "*"
integer iLimitRSSI = 180;

!--- setze "true" zum Ändern ... btw. manche Geräte brauchen ein Drücken der Config-Taste,
!--- z.B Kontakte SWDO/SWDM, Batterie-Taster/Fernbedienungen WRC*,RC8,KRCA,RCB1,
!---     Wassermelder SWD, evtl Rauchmelder SWSD

! --- hier können Werte gesetzt werden ... VORSICHTIG
boolean bSet = false;
!--- die zu setzenden Werte ... "-1" = nicht setzen
integer cycSet = -1; integer cycChSet = -1; integer cycUChSet = -1; integer iRoutingSet = 0;

!--- Variablen ---
string item;
object devobj;
string devname; string devtype; object oIFace; string iFace;
string chName;
object oCH;
string xmlOut;
integer cyc; integer cycCh; integer cycUCh;
integer iRouting; real rVolt; real rVoltAkt; integer iRSSID; integer iRSSIP;
integer iPos; integer iPos1;
string sText = ""; string sVolt; string sRSSID; string sRSSIP;
time LastDPTime;

string stdErr=""; string stdOut="";
string TCL="";

!- --- Titelzeilen der Ausgabe
WriteLine("HMIP-Gerät               \tGeräteTyp\tcycl.\tcycCh\tcycUCh\tRout.\tV-Lim.\tV-akt.\tRSSI_D\tRSSI_P\t LastActionTime CH=0");
WriteLine("---------------------------------------------------------------------------------------------------------------------------");

filterDevType = filterDevType.ToLower();
filterDevName = filterDevName.ToLower();

foreach (item, (dom.GetObject(ID_DEVICES)).EnumUsedIDs()) {         ! Schleife über alle Objekte = Kanäle im Gewerk, wie im WebUI definiert
    ! --- Geräte-Infos holen (Name, Typ, Schnittstelle)
    devobj 	= dom.GetObject(item);                                   ! Objekt der ID
    devname = devobj.Name();
    devtype = devobj.HssType();
    chName 	= devname # ":0";
    oCH 	= dom.GetObject(chName);
    oIFace	= dom.GetObject (oCH.Interface());
    iFace 	= oIFace.Name();

    if ( filterDevType && ( !devtype.ToLower().Contains(filterDevType) )) { continue; }
    if ( filterDevName && ( !devname.ToLower().Contains(filterDevName) )) { continue; }

    if ( iFace == "HmIP-RF" ) {
!-        if ( devname.Length() <= 7 ) { sText = (devname # "\t\t\t\t" # devtype);
!-        } elseif ( devname.Length() <= 15 ) { sText = (devname # "\t\t\t" # devtype);
!-        } elseif ( devname.Length() <= 23 ) { sText = (devname # "\t\t" # devtype);
!-        } else { sText = (devname # "\t" # devtype); }
!- 
!-        if ( devtype.Length() < 8 ) { sText = sText # "\t"; }


        sText = "                               ";
        sText = devname # sText.Substr(devname.Length(),-1) # "\t";
        sText = sText # devtype # "         ".Substr(devtype.Length(),-1);


        xmlOut = xmlrpc.GetParamset (oCH.Interface(), oCH.Address() , "MASTER");
		LastDPTime = oCH.LastDPActionTime();

       	iPos = xmlOut.Find(">CYCLIC_INFO_MSG<");
       	if ( iPos ) { cyc = xmlOut.Substr((iPos+34),1).ToInteger(); }

       	iPos = xmlOut.Find(">CYCLIC_INFO_MSG_DIS<");
       	if ( iPos ) {
          	iPos1 = xmlOut.Substr((iPos+38),-1).Find("<");
          	cycCh = xmlOut.Substr((iPos+38),iPos1).ToInteger();
       	}

       	iPos = xmlOut.Find(">CYCLIC_INFO_MSG_DIS_UNCHANGED<");
       	if ( iPos ) {
          	iPos1 = xmlOut.Substr((iPos+48),-1).Find("<");
          	cycUCh = xmlOut.Substr((iPos+48),iPos1).ToInteger();
       	}

       	iPos = xmlOut.Find(">ENABLE_ROUTING<");
       	if ( iPos ) {
          	iPos1 = xmlOut.Substr((iPos+38),-1).Find("<");
          	iRouting = xmlOut.Substr((iPos+38),iPos1).ToInteger();
       	}

       	iPos = xmlOut.Find(">LOW_BAT_LIMIT<");
       	if ( iPos ) {
          	iPos1 = xmlOut.Substr((iPos+36),-1).Find("<");
          	rVolt = xmlOut.Substr((iPos+36),iPos1).ToFloat();
       	}

       	!- jetzt noch ein paar Datenpunkte auch Kanal 0 mit auflisten
        rVoltAkt = 0.0;
        if ( rCH.Get(chName).DPByHssDP("OPERATING_VOLTAGE") ) {
			rVoltAkt = rCH.Get(chName).DPByHssDP("OPERATING_VOLTAGE").Value();
        }
        iRSSID = -1;
        if ( rCH.Get(chName).DPByHssDP("RSSI_DEVICE") ) {
			iRSSID = rCH.Get(chName).DPByHssDP("RSSI_DEVICE").Value();
        }
        iRSSIP = -1;
        if ( rCH.Get(chName).DPByHssDP("RSSI_PEER") ) {
			iRSSIP = rCH.Get(chName).DPByHssDP("RSSI_PEER").Value();
        }

        !- Ausgabe zusammenbasteln
        sVolt = rVoltAkt.ToString(1);
        if ( (rVoltAkt <= rVolt) && (rVolt > 0.0) && (rVoltAkt > 0.0) ) { sVolt = sVolt # " *"; };
        if ( (iRSSID > 0) && (iRSSID <= iLimitRSSI) ) { sRSSID = iRSSID # " *"; } else { sRSSID = iRSSID; }
        if ( (iRSSIP > 0) && (iRSSIP <= iLimitRSSI) ) { sRSSIP = iRSSIP # " *"; } else { sRSSIP = iRSSIP; }

        sText = sText # "\t  " # cyc # "\t  " # cycCh # "\t  " # cycUCh # "\t  " # iRouting;
        sText = sText # "\t " # rVolt.ToString(1) # "\t " # sVolt # "\t " # sRSSID # "\t " # sRSSIP # "\t " # LastDPTime;
       	if ( !bSet ) { WriteLine(sText); }

       if ( bSet ) {
          if ( (cyc <> cycSet) && (cycSet >= 0) ) {
             TCL= TCL # " {CYCLIC_INFO_MSG {i4 " # cycSet # "}}";
             WriteLine(sText # " --> CYCLIC_INFO_MSG geändert auf " # cycSet);
          }
          if ( (cycCh <> cycChSet) && (cycChSet >= 0) ) {
             TCL= TCL # " {CYCLIC_INFO_MSG_DIS {i4 " # cycChSet # "}}";
             WriteLine(sText # " --> CYCLIC_INFO_MSG_DIS geändert auf " # cycChSet);
          }
          if ( (cycUCh <> cycUChSet) && (cycUChSet >= 0) ) {
             TCL= TCL # " {CYCLIC_INFO_MSG_DIS_UNCHANGED {i4 " # cycUChSet # "}}";
             WriteLine(sText # " --> CYCLIC_INFO_MSG_DIS_UNCHANGED geändert auf " # cycUChSet);
          }
          if ( (iRouting <> iRoutingSet) && (iRoutingSet >= 0) ) {
             TCL= TCL # " {ENABLE_ROUTING {boolean " # (iRoutingSet == 1) # "}}";
             WriteLine(sText # " --> ENABLE_ROUTING geändert auf " # (iRoutingSet == 1));
          }
          if ( TCL ) {
          	 string sTCL= ^puts [xmlrpc ^ #oIFace.InterfaceUrl()# ^/ putParamset [list string \"^#oCH.Address()#^\"] [list string \"MASTER\"] [list struct \"^#TCL#^\"]]^;
			 system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr);
          }
       }
    }

}

ok, is für DIESEN Anwendungsfall evtl. etwas zuviel drin ... man sieht mMn. jedenfalls einfach und zusammenfassend den Timestamp vom CH0, also welche Geräte nach Reboot sich noch nicht gemeldet haben, bzw. nicht betätigt wurden.

Hinweis : hier ist noch der Filter auf "broll" gesetzt, zeigt also nur alle Rollo-Aktoren. Einfach auf leer = "" setzen, dann werden alle HMIP-Geräte angezeigt.

"hope it helps"

PS : ich nutze das Skript eigentlich nur im SDV ... in RM unter "Skript testen" funktioniert es auch, gerade probiert :wink:
Proxmox-MiniServer (J4125, 12GB RAM, nur SSDs, Proxmox 7.4-3), RM v3.69.7.20230506, abgesetztes, altes Funkmodul HM-MOD-RPI-PCB am RB-RF-ETH, ca. 5 HM- und 107 HMIP-Geräte, Addons : CUxD v2.10.1, eMail v1.7.6, XML-API v1.22, JB-HB v6.0, ProgrammeDrucken v2.6, CCU-Historian v3.3.1

g55
Beiträge: 235
Registriert: 02.10.2018, 19:24
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 59 Mal
Danksagung erhalten: 11 Mal

Re: Idee für verbesserte HmIP-Statusanzeige

Beitrag von g55 » 28.05.2022, 23:21

Konkret geht es um das "Problem", das nach einem Neustart der Zentrale es ja einige Zeit (bis zu 1h) dauern kann bis der aktuelle Status von homematicIP Geräten in der WebUI mit dem Status übereinstimmt wie er in Wirklichkeit ist.
Hier noch Anmerkungen meinerseits :
  • ok, ein REBOOT dauert evtl. max. 2 min
  • was ist bei Stromausfall, CPU kaputt, oder anderen Ereignissen, die länger dauern, d.h. System down > z.B. 1H ?
  • in 1H kann sich im System so einiges ändern, Rollos, Licht, Bewegung etc ... da möchte ich persönlich NIX mehr restaurieren wollen auf alten Zustand, sondern warten auf die Geräte mit aktuellem Zustand.
  • d.h., wie stelle ich im RM fest, dass es sich um einen kurzfristigen Reboot handelt oder isses doch ein längerfristiger "Ausfall"
Ich hatte mir mal ein Programm geschrieben, welches mir den aktuellen Rollo-Status aus gespeicherten SVs nach dem Reboot auf die Geräte im Sekundenbereich zurückspielt ... hab ich wieder deaktiviert, da innerhalb von nur 10 min bei Beschattung und Nacht es im Zweifelsfalle "komisch" werden kann..

Ich tendiere z.Zt. grad dazu, den Stuatus der HMIP-Geräte nach einem Reboot wirklich dem System zu überlasen. So oft wird es ja wohl nicht rebootet.
Und wenn, z.B. bei Updates, weis man ja, dass da ein wenig "Warten" angesagt ist.
Proxmox-MiniServer (J4125, 12GB RAM, nur SSDs, Proxmox 7.4-3), RM v3.69.7.20230506, abgesetztes, altes Funkmodul HM-MOD-RPI-PCB am RB-RF-ETH, ca. 5 HM- und 107 HMIP-Geräte, Addons : CUxD v2.10.1, eMail v1.7.6, XML-API v1.22, JB-HB v6.0, ProgrammeDrucken v2.6, CCU-Historian v3.3.1

Benutzeravatar
Roland M.
Beiträge: 9738
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 251 Mal
Danksagung erhalten: 1358 Mal

Re: Idee für verbesserte HmIP-Statusanzeige

Beitrag von Roland M. » 28.05.2022, 23:42

Hallo!
g55 hat geschrieben:
28.05.2022, 23:21
d.h., wie stelle ich im RM fest, dass es sich um einen kurzfristigen Reboot handelt oder isses doch ein längerfristiger "Ausfall"
Gar nicht. Es ist völlig egal, ob der Ausfall 15 Sekunden oder 15 Stunden dauerte, auch in gerade diesen 15 Sekunden kann jemand ein Fenster geöffnet haben, das anschließend beim Aktivieren der Alarmanlage nicht berücksichtigt wird.

hab ich wieder deaktiviert, da innerhalb von nur 10 min bei Beschattung und Nacht es im Zweifelsfalle "komisch" werden kann..
So ist es! ;)

Ich tendiere z.Zt. grad dazu, den Stuatus der HMIP-Geräte nach einem Reboot wirklich dem System zu überlasen.
Na ja, man sollte sich dieses Problems bewusst sein und wo es notwendig ist, in Programmen den CCU-Neustart (eben z.B. über die originale "Anwesenheit") berücksichtigen.

So oft wird es ja wohl nicht rebootet.
Genau.
Bei mir aktuelle Uptime 133 Tage, also rund 4 Monate. Da gab es das letzte FW-Update.


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Antworten

Zurück zu „RaspberryMatic“