Fensterstatus abfragen und in String schachteln

Geniales Script, danke fürs Teilen!!

Guten Morgen in die Runde,

ich hab das Script seit Jahren am laufen, aber seit der Version 7 gibt es einen Fehler, wenn alle Fenster geschlossen sind.
Ich kann leider nicht Skripten, kann sich das mal jemand ansehen?!

DANKE

Gruß
Der BEM

So wie es ausschaut kommt der Count Befehl nicht mehr mit leeren Paremetern klar. Er will eine Liste. Die wird gebaut, wenn Fenster offen sind aber eben nicht, wenn alle geschlossen sind, dann ist diese NULL.
Es muss also eine Liste mit 0 Elementen erzeugt werden die dann „gezählt“ werden können oder Du must prüfen ob die Variable $name leer ist und dann 0 in $count setzen und wenn sie nicht leer ist den jetztigen Befehl nutzen.

Okay, klingt logisch, aber da bin ich dann raus.
Vielleicht ist es auch noch ein Bug in der 7er Version.

Ich kann ja mal abwarten.

Danke für‘s erklären.

Sowas sollte gehen (ungetestet) ab @count =…:

if(is_array($names) && is_countable($names)&&count($names)>0){
 SetVale(&status, true);
 $result = implode(",", $names);
}
else{
 Setvalue($status, false);
 $result = "Alle Fenster geschlossen;
}

In Zeile 24 das einfügen und fertig.

$names = [];

Michael

2 „Gefällt mir“

Hey Michael,

das hat SUPER funktioniert.

DICKES DANKESCHÖN

Hallo zusammen,

ich bin noch relativ frisch in dem ganzen Thema was Programmierung in PHP anbelangt, nun hätte ich da auch mal eine Frage. Ich weis nur nicht, ob sie hier an der richtigen Stelle gestellt wird.

Und zwar möchte ich eigentlich nur abfragen, ob eines der Fenster geöffnet wird (ich verwende den optischen FK von Homatic) dieser liefert einen Integer Wert mit dem Text „Closed“ oder „Opened“.
Und wenn eins geöffnet wird, dann soll eine Bool Variable von False auf True gesetzt werden. Ich habe das Folgendermaßen gelöst:

irgend etwas mache ich falsch, da die Variable sich bei geöffnetem Fenster nicht ändert.

Es wäre toll wenn du Scripts nicht als Grafik sondern als Script einstellst, dann könnte man sie editieren.
Kleine Frage: Warum machst du das nicht mit einem Ablaufplan?

äähm, weil ich dachte das ich in einem Ablaufplan nur einen Auslöser eintragen kann aber nachdem du mir den Tip gegeben hast, habe ich gesehen das auch mehrere Auslöser gehen :roll_eyes:
Nur wie schalte ich im Ablaufplan dann die variable wieder zurück auf False, damit sie bei gegebenheit erneut auslösen kann?
Und damit ich wenigstens ein kleines Erfolgserlebnis habe, wie würde ich das beim Script anstellen??
Das ist jetzt vieleicht eine blöde Frage, aber wie kann ich das script hier einfügen?

Am einfachsten erstellst du zuerst eine Bool Variable mit einer Standardaktion.
Dann erstellst du einen Ablaufplan mit den drei Fenster und Trigger auf öffnen…
Mit der zugehörige Aktion setzt du dann die die Bool auf true .
Du erwähnst halt nicht, was du mit dem Wert der Bool anfangen möchtest.
Da gibt es die möglichkeit, dass du diese nach ein paar Sekunden wieder auf false setzt oder aber dies mit einem zweiten Ablaufplan tust. Musst halt ein wenig austesten, mit den Ablaufplänen kriegst du enorm viel hin ohne php…

Mit dieser Funktion…

image

OHNE Aktion. Wir wollen hier einen Sammelstatus anzeigen und nix ansteuern.
Michael

Dein Skript ist schon soweit in Ordnung, nur beim Vergleich nicht.

Du holst dir den Wert völlig korrekt mit GetValueInteger, da die Variable ja ein Integer ist.:+1:

Der Integer beinhaltet dann 0, 1 oder was auch immer für eine Zahl.

Aber dann vergleichst du mit „Opened“. Das ist immer falsch.

1 „Gefällt mir“

Hey,

Danke für den Hinweis. Ich dachte, weil der Anzeigewert in der Variable ein Text ist, muss ich auch den Text abfragen…
Okay dann muss ich mal prüfen welche Zahlen er da ausspuckt. Danke!

Die siehst du im Profil.
Theoretisch kannst du auch auf die Assoziation (Klartext) prüfen, aber der ist je nach Lokalisierung anders und somit ist das nicht zu empfehlen.
Komisch das da bei dir Opened steht, weil für ein deutsches Symcon wäre das geöffnet.
Michael

1 „Gefällt mir“

Hintergrund des ganzen ist eigentlich, ich möchte prüfen ob die Fenster geöffnet und mir das entsprechende anzeigen lassen. ( wenn ich außer Haus gehe, dass ich weiß das noch Fenster geöffnet sind) zusätzlich möchte ich bei einsetzen von Regen am besten eine Ansage von Alexa, die mir mitteilt, dass die Dachfenster noch offen sind.:grin:
Schonmal vielen Dank für den super Support.:ok_hand:

Dann weisst du ja jetzt wie du dir den Status anzeigen lassen kannst.
Ausgabe über Alexa mit VoiceMonkey möglich…

hey, danke für die vielen Antworten, leider bin ich jetzt erst dazu gekommen das ganze nochmal auszuprobieren. Eins vorneweg, ich habe das ganze nun im Ablaufplan realisiert und das funktioniert so auch super (mittlerweile auch die ausgabe über VoiceMonkey auf die Alexa) :ok_hand:

Nun wollte ich das ganze einfach so auch mit dem Script testen, weil es mich irgendwie fuchst, dass ich das so nicht aus rennen bekomme. Ich habe geprüft welcher Wert bei opened bzw. closed geliefert wird und frage nun im Script anstatt nach „openend“ einfach nach einer 1 ab. Aber irgendwie funktioniert das trotzdem nicht :man_shrugging: so schwer kann das doch nicht sein…

hier die Variable:
grafik

hier das script:

$Fenster1 = GetValueInteger(49760);
$Fenster2 = GetValueInteger(29339);
$Fenster3 = GetValueInteger(55041);

if ($Fenster1 == 1 || $Fenster2 == 1 || $Fenster3 == 1 )
{
    SetValueBoolean(18540, true);
} else {
    SetValueBoolean(18540, false);
}``

Schaut eigentlich gut aus…
Sind die Fenstervariablen tatsächlich von Typ Integer?
Ist die Variable 18540 tatsächlich eine von Typ Boolean?
Erhältst du eine Fehlermeldung?
Keine Ahnung für was die Striche am Schluss sind, lass die einfach mal weg…

<?php

$Fenster1 = GetValueInteger(49760);
$Fenster2 = GetValueInteger(29339);
$Fenster3 = GetValueInteger(55041);

if ($Fenster1 == 1 || $Fenster2 == 1 || $Fenster3 == 1 )
{
    SetValueBoolean(18540, true);
} else {
    SetValueBoolean(18540, false);
}

Was passiert denn, wenn du das Script ausführst? Kommt ein Syntaxfehler?