Für Nextcloud Recognize brauchte ich die PHP Erweiterung PDLib das Projekt bietet leider keine Paketinstallation für Debian 12. Da ich aber sowieso eine Multi PHP Installation mittels den Paketen von https://packages.sury.org/php/ nutze war sowieso selbst Kompilieren angesagt.
Die Anleitung erhaltet ihr eigentlich bereits auf der GitHub Seite des Projekts, für die Bereitstellung der Erweiterung für mehrere PHP Versionen sind allerdings ein paar Anpassungen nötig.
cd /opt
git clone https://github.com/davisking/dlib.git
cd dlib/dlib
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
Die eigentliche PDLib Erweiterung:
cd /opt
git clone https://github.com/goodspb/pdlib.git
cd pdlib
Hier die Schritte die ich verwendet habe. Dabei ist 8.3 gegen eure PHP Version auszutauschen und das ganze für jede installierte Version durchzuführen. –always-make dient hier der sauberen neu Erstellung nach dem ändern der PHP Version mit phpize und configure ein make clean schadet dabei auch nicht 😉
phpize8.3
./configure --with-php-config=/usr/bin/php-config8.3
make --always-make
sudo make install
Das nachfolgende Beispiel verwendet zum bereitstellen „Auto-load scripts on PowerShell startup“:
Allerdings habe ich den teil mit $psdir=“D:\Documents\Powershell\Scripts\autoload“ gegen“$env:USERPROFILE\Documents\WindowsPowerShell\autoload“ getauscht
lege die Datei ssh-copy-id.ps1 vom nachfolgend verlinkten gist im Verzeichnis %USERPROFILE%\Documents\WindowsPowerShell\autoload ab:
Wer viel im Smarthome bastelt möchte manchmal wissen warum etwas nicht mehr geht.
Ist die config nun falsch oder doch der Dienst mal wieder offline wegen dem Internet?
Openhab bietet zwar die Möglichkeit den zustand von Services und Things anzuzapfen, aber leider bekommt man darüber nicht heraus ob der Cloud Service gerade offline oder online ist.
Zu diesen zweck habe ich mir ein kleines PHP Scrip geschrieben das den „Cloud Status“ auf der Homepage abfragt und als json zu Verfügung stellt.
Vorbereitung: Installiere PHP und die benötigten Extensions:
Um dieses noch in openhab selber zu nutzen verwende ich ein exec Thing und php auf dem openhab host.
Im folgend nun eine Anleitung wie dies zu Installieren ist. Als erstes die Abhängigkeiten installieren sudo apt install php-cli php-curl php-xml wget und danach Installation prüfen:
php -m | egrep "xml|curl"
curl
libxml
xml
xmlreader
xmlwriter
Skript nach "/etc/openhab/bin" herunterladen (am Ende des Artikels auch nochmal verlinkt):
Dabei wird versucht euch auf myopenhab.org anzumelden und das Cookie mit der Session ID unter /etc/openhab/misc/COOKIE.TXT gespeichert. Im Anschluss solltet ihr noch die Benutzerrechte sowie Schreib,- und Leserechte anpassen chown root:openhab "/etc/openhab/misc/COOKIE.TXT" und chmod 660 "/etc/openhab/misc/COOKIE.TXT"
Konfigurationsdatei anlegen:
nano "/etc/openhab/misc/myopenhab_conf.php" und folgenden Inhalt einfügen:
„MYUSERNAME“ und „MYPASSWORD“ sind natürlich wieder durch eure Logindaten zu ersetzen. Auch hier solltet ihr die Rechte anpassen chown root:openhab "/etc/openhab/misc/myopenhab_conf.php" und chmod 640 "/etc/openhab/misc/myopenhab_conf.php"
Nun können wir schon mit dem einbinden in OpenHab anfangen. Dafür benötigt ihr das Exec Binding
Nun erstellt ihr als erstes ein Exec Thing wenn ihr eine sprechende UID wollt müsst ihr diese beim erstellen angeben. Alle anderen Parameter können auch noch später z.B. auch im YAML geändert werden. Als Befehl habe ich /usr/bin/php "/etc/openhab/bin/myopenhab_onlinestate.php" --conf="/etc/openhab/misc/myopenhab_conf.php" --cookie="/etc/openhab/misc/COOKIE.TXT" eingetragen. Den Status frage ich alle 3600 Sekunden ab also Jede Stunde ihr könnt aber auch 300 für z.B. alle 5 min eintragen.
Nach den speichern könnt ihr auch das Thing als Code bearbeiten
Hier eine Lösung sollte samba nach einen update von Debian streiken. Hat mir bei meinen Raspbian weitergeholfen (Backup der Konfiguration nicht vergessen):
Dieser Artikel dient erstmal hauptsächlich meinen Persönlichen Frustabbau aber auch als Warnung um nicht in den Kreis der leid genossenen zu Kommen.
Alles fing an einen schönen Mittwoch an als ich tatsächlich mal meinen Flyer von Unitymedia Beachtung schenkte: 1,99€ mehr im Monat dafür doppelte Bandbreite. Alleine die 6 Mbits Upload klangen verführerisch momentan gurke ich mit 2,5 Mbits rum. Der Rest mit 120 Mbits surfen klang auch nach einen „nice to have“. Da ich ein verwöhnter Altkunde bin der sich zum Glück nicht mit Gängelung wie DS-Lite oder schlechter Hardware (habe eine fritzbox 6340) rumärgern musste und sich über echten Dualstack mit ipv4 und ipv6 freut, mussten natürlich vorher Details geklärt:
werden.
Vorher natürlich schon gegoogelt… Ok die 6360 gibt es zu 120er Businesstarif und meine ist auch noch in der liste bis 200 Mbits sollte doch klappen.
Also der griff zum Telefon,
„behalte ich den auch meinen ipv4 (dualstack)“
Antwort: „JA Altkunden eigentlich immer“
„kann ich auch meine Fritz!box weiter benutzen“
Antwort: „JA, wahrscheinlich können sie ihren neuen Tarif sogar schon heute nutzen“
Von dieser Auskunft sehr erfreut, natürlich gleich abgeschlossen.
Am nächsten tag Tarif hat sich nicht geändert, dafür im Kundenmenü eine Paketankündigung. Ok mal eine Mail dorthin was das ist, mit vermerk auf die Zusicherung „meiner“* Fritzbox
Was kommt am Freitag? Eine „Connect Box“ misstrauisch das ding mal begutachtet und ohne an das Kabelnetz zu hängen mal die Oberfläche begutachtet. Ok könnte was werden ich sehe hier einen Modemodus und wenn ich meine Dualstack behalte, kann ich die wohl doch gebrauchen (Modem ist mir eh lieber). Ok mutiger schritt es ist Freitag Nachmittag ich hänge sie trotzdem ans Netz. Box blinkt und scheint irgendwann damit auch fertig zu sein.
Laptop test weise dran und die Ernüchterung: Vorher vorgenommen Einstellung natürlich weg unten auch die tolle Nachricht das sie auf DSlite läuft.
Also mal wieder Support angerufen dort hin und her nein das sollte nicht pasieren beim router könnten sie nichts machen mich aber wenigstens auf Duralsack wieder umstellen.
Nach dem ich also endlich bei einen Techniker in der Leitung war erklärte der mir das die Firmware der Conectbox das garnicht könnte die läuft softwareseitig nur mit DSlite. Und stellte mich zu einer Dame weiter die sich mit meinen Belangen beschäftigen sollte. Der erklärte ich mein Anliegen, natürlich war ich nach so einen Martyrium auch nicht mehr der Höflichste, Und verwies auch mehrfach auf mein Telefonat mit den Vertragsabschluss (die mal nebenbei gesagt eigentlich bindend sind ansonsten kommt gar kein gültiger Vertrag zu stande naja zumindestens nach Fristverstreich der Nachbesserung…) Das passte der Dame wohl überhaut nicht und erklärte mir das ich als Privatperson überhaupt keine ipv4 bräuchte ich einen Buissnesvertragabschließen müsste und wenn ich eine Fritzbox möchte ich für 5€ mehr im Monat eine Telefon Connfort Option bräuchte. das härteste sie legte nach einer knappen Rückfrage ob ich das verstanden hätte einfach auf.
Also nochmal anrufen irgendjemand wird einen ja helfen können. Diesmal tatsächlich an jemanden kompetenteren geraten der mir wenigstens anbot meine alten Vertragsbedingungen wiederherzustellen, ich solle einfach meine Fritz box wieder anschließen und er leite alles weitere ein.
Nun sehr genervt dafür aber mit einen vermeintlich wieder funktionierenden*(dazu später mehr) Dual stack Anschluss wen auch wieder mit nur 50/2.5mbit also mal das gemacht was alle foren so empfehlen seinen Frust auf Facebook gepostet:
Warum könnt ihr eure Verkaufspersonal nicht besser schulen?
Upgrade Angebot auf 120Mbits ist bei mir reingeflattert, hmm ist interessant, also mal die Hotline Anrufen.
Frage:
„behalte ich den auch meinen ipv4“
Antwort: „JA“
„kann ich auch meine Fritz!box weiter benutzen“
Antwort: „JA“
Was kommt heute? Eine „Connect Box“
was kann die? NICHTS!
Nichtmal Portweiterleitung und natürlich ausschließlich DS-Lite.
Und Dafür jetzt 1 Stunde Am Telefon verbracht um meine Änderung rückgängig zu machen und um mir erzählen zu lassen „das was sie wollen geht nicht bezahlen sie gefälligst mehr“. Eine Fritz!box die die benötigten Funktionen incl. ipv4 könnte, gibt es ja sogar, aber natürlich nur gegen 5 € Aufpreis.
Gratulation ihr habt mir gerade mein Wochenende versaut „frown“-Emoticon
*zwischenzeitlich stellte sich heraus das mein Internet zwar wieder geht und ich keine zwangsdrossel mehr über mein Handymodem brauche aber das Telefon nicht. den das wurde vergessen zu provisionieren.
wie es weitergeht und ging packe ich in einen zweiten Post….
Das Suchen und ersetzen Feld in Netbeans (STRG+H) ist sehr praktisch vorallem mit regex
ein par regex meiner täglichen arbeit sollen hier nun veröffentlicht werden für alle die sie gebrauchen können oder damit ich sie selber nicht vergesse:
Alte array() schreibweise in php > 5.4 „[]“ Arrays
array\(([^\(\)]*)\)
Find What:array\(([^\(\)]*)\)
Replace With:[$1]
leider muss dieser mehrmals angewendet werden bei Verschachtelungen trotzdem bekommt man damit in nu eine Konfigurationsdatei die deutlich kleiner und aufgeräumter ist.
Ganz so arg müssen wir uns nicht ärgern. Doch leider wird es auch nicht mit einen einfachen on/off funktionieren. Damit ihr nicht noch ZWEIHUNDERT PULS bekommt mache ich mal weiter.
nach einen ausführen der install.sh sollte das Protokoll zwar schon auswählbar und kompilierbar sein doch ein:
sudo pilight-send -H
Usage: pilight-send -p protocol [options]
-H --help display this message
-V --version display version
-p --protocol=protocol the protocol that you want to control
-S --server=x.x.x.x connect to server address
-P --port=xxxx connect to server port
-F --settings settings file
The supported protocols are:
brennenstuhl Brennenstuhl Comfort
byebyestandbye Bye Bye Standbye Switches
clarus_switch Clarus Switches
cleverwatts Cleverwatts Switches
coco_switch CoCo Technologies Switches
cogex Cogex Switches
dio_switch D-IO Switches
elro_ad Elro Home Easy Advanced Switches
elro_hc Elro Home Control Switches
elro_he Elro Home Easy Switches
generic_dimmer Generic Dimmers
generic_screen Generic Screens
generic_switch Generic Switches
generic_weather Generic Weather Stations
home_easy_old Old Home Easy Switches
impuls Impuls Switches
intertechno_old Old Intertechno Switches
intertechno_switch Intertechno Switches
kaku_dimmer KlikAanKlikUit Dimmers
kaku_screen KlikAanKlikUit Screens
kaku_screen_old Old KlikAanKlikUit Screens
kaku_switch KlikAanKlikUit Switches
kaku_switch_old Old KlikAanKlikUit Switches
nexa_switch Nexa Switches
openweathermap Open Weather Map API
pollin Pollin Switches
program Start / Stop / State of a program
quigg_switch Quigg Switches
raw Raw Codes
relay GPIO Connected Relays
rev1_switch Rev Switches v1
rev2_switch Rev Switches v2
rev3_switch Rev Switches v3
selectremote SelectRemote Switches
silvercrest Silvercrest Switches
unitech Unitech Switches
wunderground Weather Underground API
x10 x10 based devices
liefert leider noch nicht den gewünschten erfolg, wie wir unter „The supported protocols are“ sehen.
Quelltext
Fangen wir also mal an, uns den Quelltext anzuschauen. Also Zurück zu bhc9938d.c und dort die Init Funktion. Den dort müssen wir noch eigne dinge bekanntgeben.
beschäftigen wir uns zunächst mit printHelp hier setzen wir einen Funktionszeiger in diesen Fall auf eine Funktion die bhc9938dPrintHelp heißt. Ich würde hier ein ähnliches Namensschema vorschlagen also protokollnameFunktion um Namenskonflikte zu vermeiden. mit einer pasenden Methode sind wir also schon so weit Hilfetexte auszugeben:
static void bhc9938dPrintHelp(void) {
printf("\t Ich bin ein Hilfreicher Text\n");
}
was noch fehlt sind die Parameter zum steuern und natürlich das Senden dafür ergänzen wir wieder die Initfunktion
options_add rufe ich hier gleich dreimal auf, einmal für Unit eine einfache numerische ID in meinen Fall von 1-3, und jeweils einmal für on und off. Des weiteren noch ein Pointer auf die bhc9938dCreateCode Funktion die dem Protokoll das eigentliche leben Einhaucht. Der Komplette Kode schaut bei mir dann so aus:
Pilight sieht es offensichtlich nicht vor Rawcode von unbekannten Protokollen in der GUI zuzulassen, jedenfalls gibt es laut Docu keine config dafür.
Dafür aber eine Anleitung wie man seine eigenen Protokolle implementieren kann.
Als erstes mal die Umgebung
Mein Umfeld:
Ich arbeite in diesen Beispiel mit Raspbian unter den Benutzer pi. Als Entwiklungsmaschine dient mir mein Windows 8.1 PC mit Netbeans 8.0.2.
Nachtrag: Ich gehe hier im Tutorial von der manuellen Installation aus sprich über das Git Repository dies ist auch notwendig um an den Sourcecode zu kommen. Je nach dem unter welchen Beutzer ihr arbeitet oder wohin ihr die Dateien clont können die Pfade anderst sein
Entwicklungsumgebung/Editor:
Ich benutze bereits für meine Webprojekte Netbeans dort habe ich einfach die C++ Plugins installiert und schon kann es losgehen.
Ihr könnt natürlich eure favorisierte IDE oder Editor (z.B. Notepad++) verwenden.
Dateizugriff:
Um schnell kompelieren zu können belasse ich die Dateien auf dem rasperry pi und Kompeliere gleich dort, so muss man sich nicht mit Einstellungen für die passende Plattform rumärgern. Dazu mounte ich per sftp mein home Verzeichnis auf meine Entwicklungsmaschine. Das geht in Linux mit „Bordmitteln“ für Windos nutze ich momentan „SFTP Net Mount Free“. Natürlich könnt ihr das git repositorry aber auch auf die entwicklungs Maschine clonen.
Auf geht´s
So jetzt haben wir also was zum Editieren und Zugriff auf die Dateien dann kann es ja jetzt losgehen.
Als erstes navigieren wir zum Verzeichnis libs\protocols und erstellen dort zwei Dateien mit unseren Protokollnamen einmal „Protokollnamen.h“ und „Protokollnamen.c“.
Bei mir sieht es folgender masen aus:
Dabei habe ich den Quellcode einfach aus den Beispiel übernommen und das Dummy Protokoll einfach gegen meinen eigenen Protokoll Namen sprich BHC9938D getauscht. Dabei immer schön auf Groß,- und Kleinschreibung achten und am besten den Formatierungsstiel beibehalten.
Damit das ganze mitcompeliert wird müssen wir noch zwei einträge machen: Protokoll „definieren“ in CMakeConfig.txt:
set(PROTOCOL_BHC9938D ON CACHE BOOL "support for my own BHC9938D protocol")
Nun suchen wir in der Datei „CMakeLists.txt“ nach if(${PROTOCOL bei mir ab Zeile 159 und fügen kurz davor unseren eigen Absatz ein um die Source Files bekannt zu machen:
Nach diesen beiden schritten kann das Protokoll zur Instillation ausgewählt werden
Probieren geht über studieren
Nun sind wir bereit das ganze zu testen.
Im folgenden gehe ich aus das ihr piligt schon mal erfolgreich installiert/compiliert habt wenn nicht könnt ihr gleich zum Punkt Erstellen wechseln.
Sicherheit geht vor
Als erstes fertigen wir ein Backup von /etc/piligh insbesondere unsere config.json wenn dort schon Geräte für die Weboberfläche eingetragen sind.
Reinemachen
Zuerst mal mit sudo service pilight stop den Service beenden. Danach sauber deinstallieren.
Ein ./setup.sh help bringt uns folgende Hilfe zu tage:
Usage: ./setup.sh [options]
clean remove all cmake and make generated files
install install pilight
uninstall uninstall pilight
also erstmal mit sudo ./setup.sh uninstall deinstallieren und danach mit sudo ./setup.sh clean saubermachen
Erstellen
nun einfach sudo ./setup.sh ausführen un ihr soltet folgende bild erhalten