
Simba unser Kater, geboren am 20.07.2017 ist eine sehr gelungene Mischung aus einer British-Kurzhaar-Katze (Vater) und einer Siamkatze (Mutter).


Simba unser Kater, geboren am 20.07.2017 ist eine sehr gelungene Mischung aus einer British-Kurzhaar-Katze (Vater) und einer Siamkatze (Mutter).
Wir haben ein paar Philips® hue Lampen im Esszimmer und Wohnzimmer die man bisher nur über die SmarPhone App oder einem Taster von Phillips bedienen konnte.Die Wand-Schalter machten daher wenig sin. Diese möchte ich gern durch Wand-Taster austauschen. Die über ein ESP8266 die ensprechende PUT Nachricht zu der Philips hue bridge sendt um die volgenden Lampengruppen ein und aus zu schalten:
Das Pinout ist durch die geringe anzahl von Pins sehr übersichtlich wir brauchen daher auch keine so aufwendige Verkabelung damit es laufen wird.
Zum Programmieren habe ich mich eines USB zu TTL-Konverter-Modul von Silicon Labs mit eingebautem in CP2102 bedient. Und mit der Beschreibung zur verkabelung und der anpassungen an der Arduino IDE von StudioPeters Philips hue Switch war es mir dann möglicht das Modul zu Programmieren. Im gegensatz zu der StudioPeters wollte ich zwei Lampen schalten, daher konnte ich das nicht mehr mit einem DeepSleep des ESP und eines auslösen eines Resetzs bewerkstelligen. Daher sieht mein Programm ähnlich aber nicht gleich aus.
/* Project name: ESP8266 - Philips® hue Switch (Push Button)
Project URI: Originaly from https://www.studiopieters.nl/esp8266-philips-hue-switch/
Description: Switch to use with the Philips® Hue bridge and controll two light groups with one module.
Version: 2.3.3
License: MIT Copyright 2020
Note: Adapted to switch Philips HUE groups on or off via a button on the wall that works via an ESP8266.
Adapted and modifyed by Klaus, this will not deep sleep anymore and use the GPIO 0 and 2 to push the light on/off
*/
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <Bounce2.h>
// Network Parameters
IPAddress ip(<a fix IP in your network, e.g. 192, 168, 1, 222);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
// WLAN Parameters
const char ssid[] = "<WLAN SSID>"; // Network SSID (name)
const char pass[] = "<WLAN-Password>"; // Network password
// Philips HUE Bridge Parameters
const char hueHubIP[] = "<Philips hue bridge IP>"; // Hue hub IP
const char hueUsername[] = "<Philips hue bridge user ID>"; // hue bridge username
const int hueHubPort = 80;
// Lamp group parameters
int living_room_table = 4; // Group number of the lights at the livingroom table
int living_room_door = 3; // Group number of the lights at the terrace door
// Varaibles for internal usage and defined here one time
Bounce Button0 = Bounce(0, 10); // Define a unbonce the Button on GPIO 0 by 10ms
Bounce Button2 = Bounce(2, 10); // Define a unbonce the Button on GPIO 2 by 10ms
boolean Ignore0 = false;
boolean Ignore2 = false;
// Setup the WiFi Client
WiFiClient client;
boolean getHue(int group)
{
boolean onOffState = false; // To store actual on/off state of group
if (client.connect(hueHubIP, hueHubPort))
{
client.print("GET /api/");
client.print(hueUsername);
client.print("/groups/");
client.print(group);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(hueHubIP);
client.println("Content-type: application/json");
client.println("keep-alive");
client.println();
while (client.connected())
{
if (client.available())
{
client.findUntil("\"on\":", "\0");
onOffState = (client.readStringUntil(',') == "true");
break;
}
}
client.stop();
}
return onOffState;
}
void setHue(String command, int group)
{
if (client.connect(hueHubIP, hueHubPort))
{
client.print("PUT /api/");
client.print(hueUsername);
client.print("/groups/");
client.print(group);
client.println("/action HTTP/1.1");
client.println("keep-alive");
client.print("Host: ");
client.println(hueHubIP);
client.print("Content-Length: ");
client.println(command.length());
client.println("Content-Type: text/plain;charset=UTF-8");
client.println(); // Blank line before body
client.println(command);
client.stop();
}
}
void toggelLightGroup(int group)
{
if (getHue(group) == true) // If the Table light is 'off', turn it 'on' and reverse
{
String command = "{\"on\": false}";
setHue(command, group);
}
else
{
String command = "{\"on\": true}";
setHue(command, group);
}
}
void setup()
{
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, pass);
pinMode(0, INPUT);
pinMode(2, INPUT);
while (WiFi.status() != WL_CONNECTED)
{
delay(1);
}
}
void loop()
{
Button0.update();
Button2.update();
if (Button0.fell() == true) // If the button is pressed
{
toggelLightGroup(living_room_table);
}
if (Ignore2 == false && Button2.fell() == true) // If the button is pressed
{
Ignore2 = true; // As long Ignore is true, this part will not execute again
toggelLightGroup(living_room_door);
}
if (Ignore2 == true && Button2.fell() == false) // Reset the Ignore if the button is released again
{
Ignore2 = false;
}
}
Die Hardware sieht wie folgt aus. Ich habe eine einfache Lochsäge in mein Akkuschrauber gespannt und ein Stück Streifenrasterplatiene ausgesägt ca. 55mm im Duchmesser. Das Loch in der mitte ist nicht weiter Tragisch und konnte mit dem rest des Anschlusspin eines Wiederstandes überbrückt werden. Alle Bauteile passen bequem auf die runde Platine 🙂
Viel Spaß beim nachbauen/optimieren 🙂
Gruss
Klaus
Hallo zusammen,
Kurz Notiert…
Heute haben wir erfolgreich das Geschwindigkeits Signal vom ABS eines Audi TT simuliert und damit einen Audie TT aus dem Notlauf geholt. Und das alles mit einem Raspberry Pi 2 und dem alten PICAN Module (http://skpang.co.uk/catalog/pican-canbus-board-retired-replacement-available-p-1196.html).
Damit war es uns dann möglich den Motor aus dem Notlauf zu holen,
und eine Drehzahl über 2000U/Min heraus zu holen.
Warum ?
Nun ja da ist noch ein anderer Audi/VW Motor in einem Boot verbaut,
und der lies eine Drehzal von mehr als 2000U/Min nicht zu.
Mit dieser Simulation des ABS wird er es aber…
Um das zu erreichen ware nur vier CAN Telegramme nötig die etwa ein Geschwindigkeit von 25km/h simulieren. Das Signal wurde im Abstand von ca. 20ms über den CAN-Bus geschickt.
messages = [[‚4A8′,’02 80 06 00 FE 00 50 2A‘],
[‚1A0′,’00 40 A6 13 FE FE 00 1C‘],
[‚4A0′,’A0 13 AE 13 AC 13 AA 13‘],
[‚5A0′,’7F 8A 0D 60 00 70 09 AB‘]]
Ein schöner Tag 🙂
Ich beobachte in den letzten Tagen das meine WPL 13 (Okt 2008) immer wieder mal mit den Fehlern ‚Keine Leistung‘ oder ‚ERR 8005‘ in eine Störung läuft . Die ich dann nur noch mit einem Reset aufheben kann.
Ich habe bisher zwei Fehler Fälle mit Temperaturen und Drücken aufgezeichnet.
Wass kann den Plötzlichen abfalles des Messstrom Hochdrucks unter 50 (Welche Einheit weiss ich nicht) bewirken ?
Gruß
Klaus
Hier auf dem Screenshot kann man es wohl besser erkennen.
Wie man sieht gibt es auf der roten (Messtrom Hochdruck) immer wieder ausreisser. Die andere rote Linie die bis auf den Anstieg in der Mitte flach ist, ist die Rücklauftemperatur Soll.
Nach der Reperatur (Austausch des Hochdruck Transmitters) ist die rote Linie schön glatt.
Gruß
Klaus
Kurz Notiert, in welcher Zelle finde ich welchen Wert rund ums Warmwasser meiner WPMII
cansend can0 700#31.00.fa.xx.xx
00.0e: 01e8 (SPEICHERISTTEMP 48.8) Warmwassertemperatur
01.35: 0100 (WARMWASSERMODE 1) 1 Vorgang, 2 Parallelbetrieb, 3 Teilvorgang
01.81: 0258 (MAX_WW_TEMP 60.0)
01.b9: 0352 (SOLARTEMP_MAX 85.0) Max. Solartemperatur
01.d8: 01c8 (FUEHLER_1 45.6) Speichertemperatur U
01.d9: 00bf (FUEHLER_2 19.1) Kollektortemperatur
Ich habe verschieden adressen auf dem WPL 13 CAN bus ausgemacht und
versuch hier diese Module zu entschlüsseln.
Hallo,
Auf Grund der Anfragen von Oliver, habe ich mir endlich mal die Zeit genommen um den nächsten Teil zu posten.
can_to_vz ist ein einfaches bash Script das den ‚candump‘ Zeile für Zeile ausliest und diese dann analysiert. Wenn die Zeile eine der gesuchten ist, dann wird der Messwert aus der CAN-Message herausgebrochen und der Wert an die Volkszähler Instanz übermittelt.
Empfehlen würde ich aber die CAN Tools von Jürg : http://juerg5524.ch/data/can_progs.zip
Die sind deutlich performanter, und vielseitiger…
Gruss
Klaus
Hallo,
Nachdem ich über den volkszaehler.org gestolpert bin dachte ich mir,
warum das Rad neu erfinden 🙂
Super Sache, die Datenbank und das Webfrontend lassen sich relativ einfach auf einem
angemieteten Webspace mit einem LAMP unterbau packen. So das ich auf meinem
Sheevaplug Computer nur noch ein kleines PHP Script brauchte um die Daten dorthin
zu transportieren.
Der Wechselrichter ist nach wie vor ein Kostal Piko 7 der eine Netzwerkschnittstelle hat,
und auf der ersten Seite diese Informationen anzeigt :
Das angehängte PHP Script : transmit_pv_values_to_volkszaehler.org
lasse ich als user über ein cronjob alle 6 Minuten auf einem
Sheevaplug Computer mit Debian Linux „wheezy“ ausführen und füttere so
die Volkszähler Instanz.
Ihr müsstet vor eigener nutzung diese PHP Scripts allerdings :
Gruss
Klaus
Hallo,
Von meiner Photovoltaik Anlage möchte ich gern die Gesamt erwirtschaftete Energie und andere Werte in einer Datenbank ablegen. So das ich die Daten im nachhinein auch noch
in irgendeiner Form später visualisieren kann (Jahres Energie pro Tag, oder Tagesenergie
pro Stunde, Einspeiseleistung usw.)
Der Wechselrichter ist ein Kostal Piko 7 der eine Netzwerkschnittstelle hat,
und auf der ersten Seite diese Informationen anzeigt :
Das angehängte PHP Script : transmit_pv_values_to_mysqldb.php
lasse ich als user über ein cronjob alle 6 Minuten auf einem
Sheevaplug Computer mit Debian Linux „wheezy“ ausführen und füttere so
meine MySQL Tabelle „pv_messdaten“ in meiner Datenbank „mysweethome„.
Ihr müsstet vor eigener nutzung diese PHP Scripts allerdings :
CREATE TABLE `pv_messdaten` (`id` INT( 7 ) UNSIGNED NOT NULL AUTO_INCREMENT ,`Datum` DATE NOT NULL ,`Uhrzeit` TIME NOT NULL ,`Aktuell` INT( 4 ) NOT NULL ,`Gesamtenergie` INT( 6 ) NOT NULL ,`Tagesenergie` FLOAT( 2 ) NOT NULL ,`Gesamtberechnet` INT( 6 ) NOT NULL ,`S1_Spannung` INT( 3 ) NOT NULL ,`S1_Strom` FLOAT NOT NULL ,`S2_Spannung` INT( 3 ) NOT NULL ,`S2_Strom` FLOAT NOT NULL ,`L1_Spannung` INT( 3 ) NOT NULL ,`L1_Leistung` INT( 4 ) NOT NULL ,`L2_Spannung` INT( 3 ) NOT NULL ,`L2_Leistung` INT( 4 ) NOT NULL ,`L3_Spannung` INT( 3 ) NOT NULL ,`L3_Leistung` INT( 4 ) NOT NULL ,PRIMARY KEY ( `id` ));
Gruss
Klaus
Das Abfragen einer Liste mit allen UUID’s und dem entsprechendem TITLE die in
der volkszaehler.org Datenbank stecken. Kann man dies mit folgendem SQL Query
z.B. in phpmyadmin für die Datenbank durchführen :
SELECT entities.uuid, properties.value
FROM entities entities, properties properties
WHERE entities.id = properties.entity_id
AND properties.pkey = 'title'