Follow along with the video below to see how to install our site as a web app on your home screen.
Huomio: This feature may not be available in some browsers.
#! /bin/bash
mosquitto_pub=mosquitto_pub
#mosquitto_pub=echo
##################
#These are Shelly Gen1 devices
model="Konttori"
id="123"
address="192.168.0.$id"
string="$(curl -s http://${address}/meter/0 | sed -e 's,{,,' | sed -e 's,},,')"
power=$(echo "{${string}}" | jq -r .counters | jq '.[0]') # power mean for last minute in wattminutes
sumpower=$(echo $sumpower + $power|bc)
${mosquitto_pub} -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}}"
$ mosquitto_sub
Connection error: Connection Refused: identifier rejected.
$
$ ./scripts/shelly-to-mqtt.sh
Connection error: Connection Refused: identifier rejected.
Error: The connection was refused.
data_format = "json"
[[inputs.mqtt_consumer]]
servers = ["ssl://oma.palvelin:8883"]
topics = [
"/oma/topic"
]
client_id = "telegraf@grafana"
username = "harald"
password = salasana
data_format = "json"
Pari asiaa tuli mieleen.Koitan työntää tuohon iot-guruun dataa mutta mosquitto_sub pysyy vain hiljaa
{"time" : "2023-02-06 17:22:02", "model" : "Talo", "power" : 272.346, "id" : 9122}
{"time" : "2023-02-06 17:22:02", "model" : "SumPower", "power" : 289.446, "id" : 9999}
{"time" : "2023-02-06 17:23:01", "model" : "Konttori", "power" : 32.03, "id" : 9123}
{"time" : "2023-02-06 17:23:01", "model" : "Talo", "power" : 327.991, "id" : 9122}
{"time" : "2023-02-06 17:23:01", "model" : "SumPower", "power" : 360.021, "id" : 9999}
{"time" : "2023-02-06 17:24:01", "model" : "Talo", "power" : 344.359, "id" : 9122}
{"time" : "2023-02-06 17:24:02", "model" : "SumPower", "power" : 428.843, "id" : 9999}
{"time" : "2023-02-06 17:24:01", "model" : "Konttori", "power" : 84.484, "id" : 9123}
{"time" : "2023-02-06 17:25:02", "model" : "Talo", "power" : 349.07, "id" : 9122}
{"time" : "2023-02-06 17:25:01", "model" : "Konttori", "power" : 60.373, "id" : 9123}
{"time" : "2023-02-06 17:25:02", "model" : "SumPower", "power" : 409.443, "id" : 9999}
Jos tekisin niin että kirjoittaisin numeroita (miten kerron laitteen, entäs mitä numeroa kirjoitan?) niin mihin nuo käppyrät tulee tuossa palvelussa?
pub/tQAz8YAINFNzHTbAjj0R7Q/l4xFwCiKxKkk0UWQft0R7Q/rEWtD1fYqNnnX1nggHMR7Q/delta/laite1/teho
pub/tQAz8YAINFNzHTbAjj0R7Q/l4xFwCiKxKkk0UWQft0R7Q/rEWtD1fYqNnnX1nggHMR7Q/delta/laite1/temp
pub/tQAz8YAINFNzHTbAjj0R7Q/l4xFwCiKxKkk0UWQft0R7Q/rEWtD1fYqNnnX1nggHMR7Q/delta/laite2/teho
pub/tQAz8YAINFNzHTbAjj0R7Q/l4xFwCiKxKkk0UWQft0R7Q/rEWtD1fYqNnnX1nggHMR7Q/delta/laite3/teho
Pitäisikin varmaan käyttää jotain topic-rakennetta joka olisi ;
Tähän en nyt pääse kiinni...minulla IoT MQTT Panel kirjoittaa ja lukee nätisti IoT-Gurua. Brokerin osoitteena on iotguru.live, myös ip 195.201.219.208 käy.Asensin tuon IoT MQTT Panel äppin Androidiin ja sain heti tehdä bugiraportin iotguru palveluun kun palvelin mqtt.iotcloud.guru:lla on IPv6-osoite DNS-palvelussa mutta se ei vastaa siihen jonka jälkeen äppi ei edes yritä IPv4 osoitteella.
IoT-Guru mqtt_serveri hyväksyy kuvaamasi rakenteen (eli syventää hierarkiaa) ja asetta "payloadin" oikeaan paikkaan josta sen voi tilata,.pub/tQAz8YAINFNzHTbAjj0R7Q/l4xFwCiKxKkk0UWQft0R7Q/rEWtD1fYqNnnX1nggHMR7Q/delta/laite1/teho
Olen tuon tavannut (mqtt sain connected), mutta ongelmana on, että internet/advanced- developer settings valikkoa ei löydy, vaan ainoastaan oheisen kuvan mukainen webbrowseri, josta tuota ei löydy.... (vastaavan liittymän saa myös shellyn pilvestä):
Shelly UNI:ssa tuo Custom MQTT Prefix oli rajoitettu 32 merkkiin, mutta IoT GURU:ssa noita shortID:itä taas ei voi itse määritellä, ja automaattisesti generoidut ID:t ovat liian pitkiä. UNI:n osalta jäin siis umpikujaan tässä kohtaa.
Shellyn konfaamisesta IotGuruun ollut ihmettelyä muutamassa viestissä ja tämä kiinostaa myös minua. Aihetta on googlattu enemmän ku järkevä ihminen viitsii tehdä, mutta huonoin tuloksin kun etsinnässä ohje for dummies.
Shellyn logista ei vissiin voi nähdä saako Shelly yhteyden MQTT-Brokeriin ?Yritystä kyllä on ollut, mutta noob on noob, eikä aina onnistu edes säkällä
NOTE: Jos IoT-Gurun liikennettä seuraa MQTT-Explorerilla täytyy sille IoT_Guruun määritellä oma "Device" (jokaisella MQTT-client'lla täytyy olla uniikki id).MQTT-Explorer:lla tutkin joskus IoT-Gurun brokeria, Broker noteeraa vain sanomat, joiden topic'in alussa on pub/UserShortId/DeviceId/..., loppuosa voi olla mitä vaan (sekä UserShortId että DeviceId täytyy olla määritelty IoI-Gurussa).
Mikäköhän versio mulla on kun ei tuota valikkoa löydySettings --> Device Info ja siellä klikkaa DEVICE IP --> Internet & Security
Tuohon merkkimäärän rajoitukseen löytyi selitys firmware päivityksistä. Rajoitus tullut 1.10.5_RC1 firmwaressa, jos nyt oikein ymmärsin. https://m.facebook.com/groups/ShellyIoTCommunitySupport/posts/3796764140422922/
Tuolta https://sequr.be/blog/2020/11/force-update/downgrade-shelly-firmware/ on helppo vaihtaa vanhempaan firmwareen
Ja edelleen on dummy oloTestipalikkana Shelly1, johon suurin toivein ja odotuksin vaihdoin 1.10.4 firmwaren ja ja ... en vaan kai osaa. Tolla https://iotguru.cloud/tutorials/shellies sivulla on oikein kuvien kans ohjeet ja taisteltu on niitä hyödyntäen, mutta ei vaan pelaa. Kännykällä iotGurusta Field Helpistä kopioitu topic menee prefix-kenttään, mutta läppärillä jos yrittää, niin edelleen on se 32 merkin rajoitus. Muistaako läppäri uudemman firmwaren rajoituksen ja siksi pitkä topic ei kelpaa? No, kun kännykällä syöttäen kelpaa, niin sillä siis testaamaan milloin mitäkin muuttaen ja MQTT-Explorerilla liikennettä seuraten. Läpi ei tule muuta kuin loistavan Mitsurunnerin data. On koitettu rebootilla ja ilman ja vaikka miten.
Jos joku yrittää ja saa toimimaan, niin kiittäen ja kumartaen ottaisin ohjeet vastaan.
Mikäköhän versio mulla on kun ei tuota valikkoa löydy
Eikös tuon rajoituksen voi hoitaa jakamalla (IoT-Guru) topicin kahteen osaan?
* pre-fix osaan laittaa " pub/UserShortId/"
* ja varsinaiseen topiciin loput "DevicesShortId/NodeShortId/Field"
.
paukuttaa menemään, niin yritysten järjestelmällisyyteen ja huolellisuuteen saattaa lipsahtaa puutteita. Mutta kun pessimisti ei pety, niin vahva usko on, ettei tule onnistumaan.Ihan on wintoosa/android ympäristö ja kuvanmukainen härpätin.Applen laitteet käytössä? Mulla Android ja Windows ja settingsistä edeten löytyy. Sun kuvan mukaista valikkoa ei mulla ole.
Tuohon JSON-muotokysymykseen vastaan vahvalla ehkällä. Ei siis ollu mitään hajua, mutta aikani googlattuani päädyin vahvaan ehkään... mutta siitäkään en ota mitään vastuuta@wannabe ,@Raspi , lähettääkö shelly mqtt viestit aina JSON-muodossa ? Jos noin on niin viestit kyllä menevät IoT-Guru MQTT_serverille mutta Guru ei osaa parsat niitä ==> käppyröille tule mitään dataa. Viestit pystyy tilaamaan Gurun palvelimelta clientille ja jos se osaa parsia ne niin datan saa näkymään (esim MQTT-Explorerilla näkee kaikki sanomat tilaamalla pub/UserId/DeviceId/# sanomat).
.
Asenna linuxiin paketti nimeltään 'jq' niin voit parsata JSON:ia.Ihan on wintoosa/android ympäristö ja kuvanmukainen härpätin.
Linuxin kanssa saan haettua "statuksen" josta ajattelin parsia tehon ja ajaa rrd databaseen, sieltä saa nätisti käppyröitä, eipähän jää pilveen mitään....
ile@Hima:~ $ curl -s 10.0.0.196/rpc/Shelly.GetStatus
{"ble":{},"cloud":{"connected":true},"input:0":{"id":0,"state":false},"mqtt":{"connected":false},"switch:0":{"id":0, "source":"SHC", "output":true, "apower":39.8, "voltage":232.4, "current":0.170, "aenergy":{"total":2.579,"by_minute":[55.280,0.000,0.000],"minute_ts":1676314645},"temperature":{"tC":48.2, "tF":118.8}},"sys":{"mac":"xxxxxx","restart_required":false,"time":"20:57","unixtime":1676314646,"uptime":1463,"ram_size":234592,"ram_free":155676,"fs_size":458752,"fs_free":94208,"cfg_rev":11,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"available_updates":{}},"wifi":{"sta_ip":"10.0.0.196","status":"got ip","ssid":"xxxxx","rssi":-35},"ws":{"connected":false}}
ile@Hima:~ $
#! /bin/bash
# 2022-12-15 Harald
# see ~/.config/mosquitto_pub for servername, username, passwords and such
sumpower="0"
##################
#These are Shelly Gen1 devices
model="ShellyIVTILP"
id="224"
address="10.0.0.$id"
string="$(curl -s http://${address}/meter/0 | sed -e 's,{,,' | sed -e 's,},,')"
#energy=$(echo "{${string}}" | jq -r '.total')
#power=$(echo "{${string}}" | jq -r '.power') # power in watts
power=$(echo "{${string}}" | jq -r .counters | jq '.[0]') # power mean for last minute in wattminutes
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}}"
##########
model="ShellySula"
id="214"
address="10.0.0.$id"
string="$(curl -s http://${address}/meter/0 | sed -e 's,{,,' | sed -e 's,},,')"
power=$(echo "{${string}}" | jq -r .counters | jq '.[0]') # power mean for last minute in wattminutes
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}}"
##########
model="ShellyTalli"
id="215"
address="10.0.0.$id"
string="$(curl -s http://${address}/meter/0 | sed -e 's,{,,' | sed -e 's,},,')"
power=$(echo "{${string}}" | jq -r .counters | jq '.[0]') # power mean for last minute in wattminutes
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}}"
model="ShellyMitsuILP"
id="222"
address="10.0.0.$id"
string="$(curl -s http://${address}/meter/0 | sed -e 's,{,,' | sed -e 's,},,')"
power=$(echo "{${string}}" | jq -r .counters | jq '.[0]') # power mean for last minute in wattminutes
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}}"
# Shelly4PM is a gen2 device
# vessalattia
model="ShellyPM4-0"
id="225"
address="10.0.0.$id"
power=$(curl -s -X POST -d '{"id":0,"method":"Switch.GetStatus","params":{"id":0}}' http://${address}/rpc | jq -r '.result'|jq -r '.apower')
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}0}"
# saunalattia
model="ShellyPM4-1"
address="10.0.0.$id"
power=$(curl -s -X POST -d '{"id":1,"method":"Switch.GetStatus","params":{"id":1}}' http://${address}/rpc | jq -r '.result'|jq -r '.apower')
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}1}"
model="ShellyPM4-2"
address="10.0.0.$id"
power=$(curl -s -X POST -d '{"id":2,"method":"Switch.GetStatus","params":{"id":2}}' http://${address}/rpc | jq -r '.result'|jq -r '.apower')
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}2}"
model="ShellyPM4-3"
address="10.0.0.$id"
power=$(curl -s -X POST -d '{"id":3,"method":"Switch.GetStatus","params":{"id":3}}' http://${address}/rpc | jq -r '.result'|jq -r '.apower')
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}3}"
id="149"
model="ShellyTalliILP"
address="10.0.0.$id"
power=$(curl -s -X POST -d '{"id":3,"method":"Switch.GetStatus","params":{"id":0}}' http://${address}/rpc | jq -r '.result'|jq -r '.apower')
sumpower=$(echo $sumpower + $power|bc)
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"${model}\", \"power\" : ${power}, \"id\" : 9${id}3}"
#### Publish sum of all powers
mosquitto_pub -m "{\"time\" : \"$(date "+%Y-%m-%d %H:%M:%S")\", \"model\" : \"SumPower\", \"power\" : ${sumpower}, \"id\" : 9999}"
IoT-Gurussa on kaksi palikkaa.Mitä muotoa toi iotguru ymmärtää
Meillä samat hilavitkuttimet mutta eri käyttäjäliitäntä. Firmware näyttäis sulla olevan vanhempi, zekkaa firmwaresta ja vertaa tähän mun kuvaan onko myös 'web build id' eriävä. Eli täällä edelleen ko. valikko kateissa...Näpyttele härpäkkeen IP-osoite selaimen osoitekenttään. Enter ja pitäs aueta tollanen valikko. Tässä Plussassa on tältä osin näköjään vähän erillainen valikko tässä kohtaa ja eteenpäin kuin peruspalikoissa.
Klikkaa Networks...
katso liitettä 84837
aukee tää. Alimmaisena on MQTT ja siitä ...
katso liitettä 84838
aukee tää.
katso liitettä 84839
Samalle tielle Settings-valikkojen kautta. Oot tehny Factory Resetin. Siinä samassa valikossa, josta teit resetin, Factory Reset-painikkeen alla on Device Information-painike. Sitä painamalla aukee uus valikko, jossa kolmantena on DEVICE IP. Sen painikke aukaisee suoraan ton eka kuvan valikon,, joten ei tarvetta näpytellä IP-osoitetta.
Onnea ja menestystä Shelly - IoTGuru taisteluun![]()
Some odness going onMeillä samat hilavitkuttimet mutta eri käyttäjäliitäntä. Firmware näyttäis sulla olevan vanhempi, zekkaa firmwaresta ja vertaa tähän mun kuvaan onko myös 'web build id' eriävä. Eli täällä edelleen ko. valikko kateissa...
Kokeilin myös varuiksi eri selaimilla ja sammuttamalla firewallin.
Tämä jo hiukka huvittaa

Ei ole onnistunut downgrade, päivitysohjeet ovat vain gen1 värkeille. Mistään en löytänyt shelly 1PM plus (gen2) ohjetta sw:n downgradelle.
Onko kellään neuvoja ??
Nyt käppyrät syntyy omalle himalinuxille simppeli skriptillä. Pyörii cronissa nyt 2min ajalla.Jaa mielellään miten teet RRD-toolilla? Eikös tuo ole MRTG:n seuraaja?
General
#!/bin/bash
#tämä skripti hakee ja parsii shelly 1PM plussalta tehon ja energian. Tallentaa rrd-databaseen kuten myös levyllä olevat lampotilat.
a=`curl -s 10.0.0.196/rpc/Shelly.GetStatus | tr '\,' '\n' | awk 'match($0,/apower:*/){print substr($0,RSTART+8)}' | sed -r 's/.{2}$//$
b=`curl -s 10.0.0.196/rpc/Shelly.GetStatus | tr '\,' '\n' | awk 'match($0,/aenergy:*/){print substr($0,RSTART+18)}' | sed -r 's/.{4}$$
let bb=$b/1000
#echo "$bb"
echo $a >/home/ile/shelly/currentpower #nama talletukset sivuille tämänhetken tilannetiedot
echo $bb >/home/ile/shelly/totalpowerk
c=$(</var/www/html/tempera/himaulko)
d=$(</home/ile/shelly/tempemitsu)
#echo "$c" #echos for testing
#echo "$d"
let aa=$a/10
#echo "$aa"
rrdtool update /var/www/html/shelly3/powertempera.rrd N:$aa:$c:$d
exit
-------------------------------------------------------
skripti mikä piirtää kuvat rrd-databasesta:
--------------------------------------------------------
#!/bin/bash
RRDPATH="/var/www/html/shelly3/"
RAWCOLOUR1="#00FF00"
RAWCOLOUR2="#0000FF"
RAWCOLOUR3="#FF0000"
#10min
rrdtool graph $RRDPATH/10min.png --start -10m \
-w 480 -h 240 -a PNG \
--vertical-label "Temperatures ouside & heatinside C" \
--slope-mode \
--watermark "Current_power=`cat /home/ile/shelly/currentpower` W Total_energy=`cat /home/ile/shelly/totalpowerk` kWh since 2.3-23" \
--right-axis-label "Power green line W" \
--right-axis 10:0 \
DEF:temp1=$RRDPATH/powertempera.rrd:Power:AVERAGE \
DEF:temp2=$RRDPATH/powertempera.rrd:tempeulko:AVERAGE \
DEF:temp3=$RRDPATH/powertempera.rrd:tempemitsu:AVERAGE \
LINE3:temp1$RAWCOLOUR1:"10 minutes power W" \
LINE1:temp2$RAWCOLOUR2:"outside temp C" \
LINE1:temp3$RAWCOLOUR3:"inside heat temp C" \
#hour
rrdtool graph $RRDPATH/hour.png --start -1h \
-w 480 -h 240 -a PNG \
--vertical-label "Temperatures ouside & heatinside C" \
jne....
code
Oisin sitä tietty jo kokeillu, mutta jääny pelkäksi pohdinnaksi, kun ei oo osaamista noihin koodihommiin