HomeMatic Funk-Schaltaktor 1fach mit Leistungsmessung

Man kann, ja, wie schon mehrmals erwähnt :wink:

Das kann aber auch den WAF ins bodenlose treiben, wenn die Hausfrau in der Waschküche versucht, per Tastendruck am Adapter die Waschmaschine vom Netz zu trennen (weil sie laut Anzeige in der CCU selbst im AUS-Zustand Leistung verbraucht) und IPS das Teil gleich wieder einschaltet :slight_smile:

Eigentlich hatte ich vor, die Variable „BOOT“ zur Unterscheidung von Spannungswiederkehr nach Stromausfall und gewolltem Abschalten zu verwenden (weil ich dachte, „BOOT“ habe irgendwas mit dem Vorgang Booten zu tun), aber die Variable wird immer nur als True mitgeliefert und hat sich noch nie geändert.

Hat jemand einen Verdacht, was uns die Variable „BOOT“ sagen will ?

Ich hab ein anderes Problem bzgl. Stromausfall.
Ich habe 2 Variablen zum Verbrauch in der CCU-WebUI. Eine der Variablen resetet sich, wenn der Strom weg ist, die andere nicht, die hat dafür einen Reset-Knopf. In IPS sehe ich aber nur die resettete. Das sehe ich als Problem, denn mein Kriterium den Energiezähler zu resetten ist nicht der Stromausfall :stuck_out_tongue: … wie löst ihr das ?

Grüße

Julian

Nachrichtenbild(136359937).png

Die welche sich nicht resetet ist in der CCU gefuehrt. Entweder du fuehrst so eine auch in IPS die autonom mitzaehlt oder du fragst die auf der CCU ab und machst die als Referenz.

Die 2 Möglichkeiten hab ich mir auch schon überlegt. Aber wie ich die aus der CCU abfrage, weiss ich nicht. Sie wird jedenfalls ja nicht automatisch als Variable über den HM-Konfigurator zur Verfügung gestellt. Und wenn der Zählerstand, aus welchen gründen auch immer doch Verloren geht … eigentlich ist die Idee, in IPS eine eigene Variable zu führen besser.

Hast du denn zufällig schon ein Script, bzw. eine Idee, wie man das umsetzen kann ?
Falls nicht, werd ich mir Heute abend mal gedanken machen, aber hätte ja sein können, dass das schon jemand gemacht hat.

Salü

Also ich löse sowas lieber in IPS mit einem autonomen Zähler der mitläuft… da kann man halt auch grad einiges dabei anpassen zum Beispiel die richtige Konvertierung W -> KW -> W/KWh das wiederum zbsp bei IPS_Powercontrol dazu beiträgt das man die richtigen Werte sieht. Zudem kann sich an der CCU eher was ändern… neuer Abfrageurl oder XML Api läuft ab einer neuen Version nicht mehr (das wäre Horror) u.s.w.

Aber ja, wie du gaaanz direkt diese eine Variable aus der CCU kriegst weiss ich grad nicht auswendig aber es geht. Aber auch klappen und funktionieren tut es so auf diese weise

Zuerst auf der CCU ein kleines Programm erstellen welches den Inhalt der StateKW-Variable lokal auf der CCU bei Änderung in eine eigene, selbst erstellte Floatvariable auf der CCU kopiert (bei Änderung triggern)
Diese Liste/URL mit IPS abfragen XML-Loadfile einlesen http://192.168.3.150/config/xmlapi/sysvarlist.cgi
Kurz mit XML parsen und die eigene/vorher selbst erstellte Variable auslesen und in eine lokale IPS-Variable setzen/speichern
Dieses Script mit einem Trigger zbsp alle 3 Minuten ausführen

Der Grund für den Zwischenschritt hier mit der eigenen Variable ist der, dass nur selbst erstellte Variablen in dieser XML-Liste zurückgegebenen werden. Die systemeigenen gehen schon auch noch irgendwie aber so läufst auch. Falls du für das XML und auslesen der URL Hilfe brauchst suche danach im Forum, gibt einzelne Beispiele und ist nur copy paste.

Gruss

Und nochmal zum Thema Stromausfall:

Ich habe das Problem, dass ich eine Steckdose vor der USV habe, an der die CCU und der IPS Server hängt. Da hilft mir kein IPS Skript. Zumindest nicht mehr nach den gut 2 Stunden Überbrückungszeit der USV.

In einem anderen Forum habe ich über Google hierzu eine gute Lösung gefunden. Darf ich den Link zum Forum hier posten?

Gruß Marcel

Hä ?

Darf ich den Link zum Forum hier posten?

Sprechen die Forenbedingungen dagegen ?

Sprechen die Forenbedingungen dagegen ?

Keine Werbung, keine anstössigen Inhalte => Nein.

Sollte doch einer der Moderatoren etwas dagegen haben, bitte ich um Löschung.

Im Homematic-Forum fand ich die Implementireung direkt im Aktor (Sollte bei Direktverknüpfung doch auch autark, also ohne CCU laufen? Aber ich probiere es heute Nachmittag)

http://homematic-forum.de/forum/viewtopic.php?f=31&t=15953

Gruß Marcel

@ Powerfreddy: Bezog sich das Häh auf mein Problem oder die Frage zum Link?

Haha, die Idee in dem Link ist natürlich lässig. Könnte vielleicht sogar funktionieren. Würde ich dann aber schnell implementieren - ist wohl eher ein „Bug“ und weniger gewollt. In einer neuen SW-Version wird das wohl nicht mehr klappen. Es gibt einige Beiträge zu diesem Thema für die „einfachen“ Schaltsteckdosen HM vielleicht kannst du mal nach denen suchen. Kannst ja mal posten ob das so geklappt hat. Ach ja und auch die Vorgehensweise in deinem Link setzt voraus das eine kleine Stromabnahme an der Steckdose überhaupt vorhanden ist damit das klappt.

Gruss

Ich hoffe nicht, dass es ein Bug ist? Ich finde die Funktion sinnvoll. Warum wird eine kleine (Strom)Abnahme notwendig, wenn ich die eingehende Spannung überwache?

Ich werde es heute Nachmittag mal testen.

Gruß Marcel

Falsch interpretiert, pardon :o

Frage mich nur gerade wie das Teil die Spannungswiederkehr mitbekommen soll. Die Spannung bleibt auch nach dem Trennen vom Netz in der Anzeige bei 230V stehen. Dann vielleicht eher mit dem Einschaltskript ohne Bedingungen (auch im Forum). Dies wird beim Neustart der CCU ausgeführt.

Die Teile sind übrigens mal echt gut. Nicht nur dass ich jetzt anzeigen kann, welchen Waschgang die Waschmaschine gerade macht und in welcher Phase sie ist - ich bekomme sogar mit, ob nach Ende des Programms die Tür schon geöffnet wurde. Beim Geschirrspüler das gleiche.

Zwei HM-Magnetkontakte wurden dadurch überflüssig - und ich kann endlich sehr präzise sagen, wann die Wäsche wirklich fertig ist. Das war vorher (mit FS20-FMS) nur eine grobe Schätzung drin.

Nur die Schaltfunktion ist mir momentan mehr hinderlich als nützlich, spätestens beim ersten Stromausfall…

Richtig, aber ich hoffe, dass ein Kondensator den Atmega? noch so lange puffert, dass er Zeit hat, die 0 noch zu speichern.

Gruß Marcel

Mal schauen ob das klappt Marcel, kannst uns ja dann bescheid geben. Aber ja, es ist nicht unmöglich und könnte gut klappen. Zu deiner Frage „Bug“… es gibt anscheinend sogar eine Vorschrift die das automatische angehen solcher „Steckleisten, Aktoren etc.“ verbietet (Kurzschluss, Fehlstrom etc.). Aber such mal in den Foren dann findest du schon was dazu. Deswegen ist es gut möglich, dass man dies nicht ewige lange so mit HM konfigurieren kann. Aber einmal drin… vermutlich immer drin.

Sonst kann ich nur zustimmen, die Teilchen sind wirklich äusserst nützlich.

Die Plugwise Circles gehen auch von selber wieder an wenn Sie Strom bekommen. Das dürften Sie wohl nicht wenn das gegen eine entsprechende Vorschrift verstossen würde.

Im aktuellen ELV Journal, Seite 25, steht genau dies als Lösungsvorschlag von der ELV Hotline. Ein Bug ist daher wohl eher unwahrscheinlich.

Gruß,
Loerdy

Gesendet von meinem iPad mit Tapatalk

Ja, da liest ELV wohl auch im Internet… :slight_smile:

Es funktioniert auch, zumindest mit laufender Zentrale (da ich diese gestern nicht abschalten wollte). Aber wenn ich die Logik richtig verstehe, sind die direkten Geräteverknüpfungen doch Zentralen unabhängig?

Ich halte es im Auge.

Gruß Marcel

Das finde ich auch den viel besseren Ansatz, meine Frage war ja auch eigentlicht ob jemand so etwas schon macht, weil mir keine Idee kam, das umzusetzen. Trotzdem Danke für deine Ansätze, wie man die CCU-Variable auslesen könnte. Habe jetzt mal was geschrieben, es funktionierte bei mir in einem ersten Test, bin mir aber noch nicht sicher, ob das wirklich die Perfekte Lösung ist bzw. ob noch Fehler drin sind.

Das Script macht im Prinzip folgendes:

Wenn HM-Zaehler über 0 dann IPSVerbrauch = IPSVerbrauch + (HM-Zaehler - Cache)
Cache = HM-Zaehler
Triggern auf Änderung der HM-Zaehler

Die Funktionen zum Anlegen neuer Variablen usw. sind von Swifty abgeschrieben.

<?

// Beschreibung --------------------------------------------------------------------------
		// Installation: Homematic-Powermeter-Instanz IDs eintragen, einmal über Konsole ausführen
		// Die neu angelegten variablen werden einmal in der Powermeter Instanz verlinkt, können von dort gelöscht oder verschoben werden.

		// Scriptbeschreibung:
		// Wenn HM-Zaehler über 0 dann IPS-Verbrauch = IPS-Verbrauch + (HM-Zaehler - Cache)
		// Cache = HM-Zaehler
		// Rückgabewert in KWh umrechnen
// Konfiguration -------------------------------------------------------------------------
$Divisor = 1000; // Wh in KWh
$HMInstanzID[]=12345;
$HMInstanzID[]=54321;
//----------------------------------------------------------------------------------------

If ($_IPS['SENDER'] == "Execute")  // Instalation
		{
		foreach($HMInstanzID as $MeterId)
				{
     			$VarIdVerbrauch = CreateVariableByName($_IPS['SELF'], "Verbrauch_$MeterId", 2, "", "Verbrauch_$MeterId", 0);
				$VarIdCache = CreateVariableByName($_IPS['SELF'], "Cache_$MeterId", 2, "", "Cache_$MeterId", 0);
				SetTimerByName($_IPS['SELF'], "Trigger_$MeterId", IPS_GetObjectIDByName("ENERGY_COUNTER", $MeterId));
				SetLinkByName($MeterId, "Verbrauch", $VarIdVerbrauch, 0);
				IPS_SetVariableCustomProfile ( $VarIdVerbrauch , "~Power" );
				}
		}

if(@$_IPS['SENDER'] == "Variable")
		{
		$MeterId = intval (trim (IPS_GetName ($_IPS['EVENT']), "Trigger_" ));
		
		$VarIdCounter = IPS_GetObjectIDByName("ENERGY_COUNTER", $MeterId);
		$VarIdVerbrauch = @IPS_GetObjectIDByName("Verbrauch_$MeterId", $_IPS['SELF']);
		$VarIdCache = @IPS_GetObjectIDByName("Cache_$MeterId", $_IPS['SELF']);

		if(GetValueFloat($VarIdCounter) > 0)
				SetValueFloat ($VarIdVerbrauch, GetValueFloat($VarIdVerbrauch) + (GetValueFloat($VarIdCounter)/$Divisor - GetValueFloat($VarIdCache)));
				
		SetValueFloat ($VarIdCache, GetValueFloat($VarIdCounter)/$Divisor);
		}

function CreateVariableByName($parentID, $name, $type, $profile, $ident, $position)
    {
        $vid = @IPS_GetVariableIDByName($name, $parentID);
        if($vid === false)
        {
            $vid = IPS_CreateVariable($type);
            IPS_SetParent($vid, $parentID);
            IPS_SetName($vid, $name);
				IPS_SetPosition ($vid, $position);
            IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
            if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
				if($ident !=="") {IPS_SetIdent ($vid , $ident );}
			}
	  	  return $vid;
    }

function SetTimerByName($parentID, $name, $ausloeser)
    {
     $eid = @IPS_GetEventIDByName($name, $parentID);
     if($eid === false)
        {
            $eid = IPS_CreateEvent(0);                  //Ausgelöstes Ereignis
				IPS_SetEventTrigger($eid, 1, $ausloeser);        //Bei Änderung von Variable mit ID 15754
				IPS_SetParent($eid, $parentID);         //Ereignis zuordnen
            IPS_SetName($eid, $name);
            IPS_SetInfo($eid, "this timer was created by script #".$_IPS['SELF']);
				IPS_SetEventActive($eid, true);             //Ereignis aktivieren
        }
		return $eid;
    }

function SetLinkByName($parentID, $name, $targetID, $position)
    {
	 $lid = @IPS_GetLinkIDByName ($name, $parentID );
	 if($lid === false)
        {
			$LinkID = IPS_CreateLink();       //Link anlegen
			IPS_SetName($LinkID, $name); 		//Link benennen
			IPS_SetLinkTargetID($LinkID, $targetID);
         IPS_SetParent($LinkID, $parentID);
         IPS_SetPosition ($LinkID, $position);
		  }
    return $lid;
	 }

?>